From a5eb556ebb859ee07caf12095327810b28057548 Mon Sep 17 00:00:00 2001 From: phear Date: Tue, 6 Sep 2005 17:52:46 +0000 Subject: [PATCH] init --- INSTALL | 18 +++ README | 39 +++++ ROADMAP | 55 +++++++ TODO | 1 + generate_goban_images.py | 25 ++++ goban.py | 174 +++++++++++++++++++++ helper.py | 38 +++++ img/bottomleftline.png | Bin 0 -> 5708 bytes img/bottomleftline_black.png | Bin 0 -> 4343 bytes img/bottomleftline_white.png | Bin 0 -> 4764 bytes img/bottomline.png | Bin 0 -> 5641 bytes img/bottomline_black.png | Bin 0 -> 4357 bytes img/bottomline_white.png | Bin 0 -> 4761 bytes img/bottomrightline.png | Bin 0 -> 5696 bytes img/bottomrightline_black.png | Bin 0 -> 4343 bytes img/bottomrightline_white.png | Bin 0 -> 4759 bytes img/centerline.png | Bin 0 -> 5638 bytes img/centerline_black.png | Bin 0 -> 4364 bytes img/centerline_white.png | Bin 0 -> 4771 bytes img/centerwhite.png | Bin 0 -> 3405 bytes img/hoshi.png | Bin 0 -> 5759 bytes img/hoshi_black.png | Bin 0 -> 4364 bytes img/hoshi_white.png | Bin 0 -> 4771 bytes img/leftline.png | Bin 0 -> 5700 bytes img/leftline_black.png | Bin 0 -> 4351 bytes img/leftline_white.png | Bin 0 -> 4773 bytes img/rightline.png | Bin 0 -> 5689 bytes img/rightline_black.png | Bin 0 -> 4350 bytes img/rightline_white.png | Bin 0 -> 4769 bytes img/topleftline.png | Bin 0 -> 5710 bytes img/topleftline_black.png | Bin 0 -> 4336 bytes img/topleftline_white.png | Bin 0 -> 4762 bytes img/topline.png | Bin 0 -> 5648 bytes img/topline_black.png | Bin 0 -> 4351 bytes img/topline_white.png | Bin 0 -> 4766 bytes img/toprightline.png | Bin 0 -> 5700 bytes img/toprightline_black.png | Bin 0 -> 4339 bytes img/toprightline_white.png | Bin 0 -> 4761 bytes imgsource/background.png | Bin 0 -> 4518 bytes imgsource/blackstone.png | Bin 0 -> 1493 bytes imgsource/bottomleftline.png | Bin 0 -> 187 bytes imgsource/bottomline.png | Bin 0 -> 188 bytes imgsource/bottomrightline.png | Bin 0 -> 189 bytes imgsource/centerline.png | Bin 0 -> 194 bytes imgsource/hoshi.png | Bin 0 -> 229 bytes imgsource/leftline.png | Bin 0 -> 195 bytes imgsource/rightline.png | Bin 0 -> 194 bytes imgsource/topleftline.png | Bin 0 -> 188 bytes imgsource/topline.png | Bin 0 -> 187 bytes imgsource/toprightline.png | Bin 0 -> 189 bytes imgsource/whitestone.png | Bin 0 -> 1623 bytes init_webgo.py | 23 +++ login.py | 130 ++++++++++++++++ main.py | 73 +++++++++ mptest.py | 7 + old_functions.py | 51 +++++++ psql.py | 274 ++++++++++++++++++++++++++++++++++ test.py | 3 + 58 files changed, 911 insertions(+) create mode 100644 INSTALL create mode 100644 README create mode 100644 ROADMAP create mode 100644 TODO create mode 100755 generate_goban_images.py create mode 100755 goban.py create mode 100644 helper.py create mode 100644 img/bottomleftline.png create mode 100644 img/bottomleftline_black.png create mode 100644 img/bottomleftline_white.png create mode 100644 img/bottomline.png create mode 100644 img/bottomline_black.png create mode 100644 img/bottomline_white.png create mode 100644 img/bottomrightline.png create mode 100644 img/bottomrightline_black.png create mode 100644 img/bottomrightline_white.png create mode 100644 img/centerline.png create mode 100644 img/centerline_black.png create mode 100644 img/centerline_white.png create mode 100644 img/centerwhite.png create mode 100644 img/hoshi.png create mode 100644 img/hoshi_black.png create mode 100644 img/hoshi_white.png create mode 100644 img/leftline.png create mode 100644 img/leftline_black.png create mode 100644 img/leftline_white.png create mode 100644 img/rightline.png create mode 100644 img/rightline_black.png create mode 100644 img/rightline_white.png create mode 100644 img/topleftline.png create mode 100644 img/topleftline_black.png create mode 100644 img/topleftline_white.png create mode 100644 img/topline.png create mode 100644 img/topline_black.png create mode 100644 img/topline_white.png create mode 100644 img/toprightline.png create mode 100644 img/toprightline_black.png create mode 100644 img/toprightline_white.png create mode 100644 imgsource/background.png create mode 100644 imgsource/blackstone.png create mode 100644 imgsource/bottomleftline.png create mode 100644 imgsource/bottomline.png create mode 100644 imgsource/bottomrightline.png create mode 100644 imgsource/centerline.png create mode 100644 imgsource/hoshi.png create mode 100644 imgsource/leftline.png create mode 100644 imgsource/rightline.png create mode 100644 imgsource/topleftline.png create mode 100644 imgsource/topline.png create mode 100644 imgsource/toprightline.png create mode 100644 imgsource/whitestone.png create mode 100755 init_webgo.py create mode 100755 login.py create mode 100755 main.py create mode 100755 mptest.py create mode 100755 old_functions.py create mode 100755 psql.py create mode 100644 test.py diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..86e11db --- /dev/null +++ b/INSTALL @@ -0,0 +1,18 @@ +----------------- creating the database -------------------- +#installing PostgreSQL the Debian way +apt-get install postgresql +su postgres +#in template1 +psql template1 +#at the prompt write: +CREATE DATABASE webgo ; +#now create user who is allowed to administrate this database +#user and password should be changed;> +CREATE USER name PASSWORD 'password'; +#now make a super user out of this user: +#TODO:tighter rights for user, this should be unsecure +ALTER USER name CREATEUSER; +#now change the user and password variables in the script + +webgouser +webgopassword \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..0f9b905 --- /dev/null +++ b/README @@ -0,0 +1,39 @@ +------------------------------------------- +WebGo Development: + +Steps to do to get a runnable version: +1. create /etc/apache2/conf.d/webgo.conf with content: + +Alias /webgo /home/mtsrc/daten/projekte/webgo/stderr.py + + + Options ExecCGI + AddHandler cgi-script .py + AllowOverride None + order allow,deny + allow from all + + +You should replace the directory settings for optimal results ;> + +2. set ownership of webgo directory to ownership of the web server + +this should be all. Errors get written to ./cgi_errors.log. + +------------------------------------------- + +How to make the goban clickable: + data += '
' + data += '' + #insert rest of goban here + data += '
' + print data + +How to extract the data from this POST: + import cgi + #get instance of fieldstorage + form = cgi.FieldStorage() + #if form == empty (which means if page is displayed for the first time): + if form.keys() != []: + #cut out the name of the clicked button + print string.split(form.keys()[0],".x")[0] \ No newline at end of file diff --git a/ROADMAP b/ROADMAP new file mode 100644 index 0000000..ecb51a6 --- /dev/null +++ b/ROADMAP @@ -0,0 +1,55 @@ + +M0: debug messages as html + Create a script that prints the python stderr of thea main script as html, + so debugging the cgi becomes more easy. + +M1: user interaction thorugh images + Completed, when a user can click on an image, and the image gets replaced + as a result. + +m2: autogenerate images + There are partly transparent images of black and white stones, center, + border and hoshi squares, all available in png format. The Milestone is + considered complete when the program can automatically generate combined + images of all squares with all stones. The stones have to be on top ;> + +m3: display working 9x9 goban + Completed, when the cgi script has an internal representation of a goban + that can handle stones, and this goban is displayed on a html page. + +m4: handle player turns + The program knows wether it is the turn of black or white, and prints the + current turn color on the html page displaying the goban. If player white + clicks on an empty square, a white stone will be layed onto that square. + Same for Player black. + +m5: goban inside database + Manage the goban inside a postgresql database, so all user input changes a + table in the database. Includes a 'size' item that contains the length of + on side of the board, so that gobans of size 9x9, 13x13 and 19x19 can be + displayed. + + . <--- YOU ARE HERE. + +m6: manage users and game sessions inside database + manage user accounts and the game(s) they currently play inside the data- + base. each game has its own table, which contains players, current turn, + size, the goban inside the database. users are managed in a different + table. For each user the following data is stored: password, current games + (up to 8 or so). So if the user calls the cgi script, she has to send + username and password and is then given the choice of game to play. If + there is only one active game, directly present the goban. + +m7: implement Go rules + Do not accept player moves which violate go rules. Remove beaten stones. + Count and display the score for each player. + +m8: make it pretty, make it fast. + Create nicer images replacing the old ones which were just for testing + Find bottlenecks and optimize them for speed. + -- python profiler + -- http://peter.mapledesign.co.uk/weblog/archives/python_is_slow.html + create a set of images smaller than 50 pixels (for the 19x19 goban) + +m9: make it standards compliant + w3c validation \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..1e74532 --- /dev/null +++ b/TODO @@ -0,0 +1 @@ +- hoshi Bilder fuer weisse und schwarze Steine erstellen \ No newline at end of file diff --git a/generate_goban_images.py b/generate_goban_images.py new file mode 100755 index 0000000..2993d12 --- /dev/null +++ b/generate_goban_images.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +""" +a simple script using pil to generate the goban from background, grid and stone images. +""" +import Image +gridlist = ["bottomleftline","bottomline","bottomrightline", + "centerline","hoshi","leftline","rightline", + "topleftline", "topline","toprightline"] + +whitestone = Image.open("imgsource/whitestone.png").convert("RGBA") +blackstone = Image.open("imgsource/blackstone.png").convert("RGBA") + +for item in gridlist: + #creating empty goban + bg = Image.open("imgsource/background.png").convert("RGBA") + img = Image.open("imgsource/"+item+".png").convert("RGBA") + bg.paste(img,None,img) + bg.save("img/"+item+".png") + tmp = bg #for the black stones + #filling with white stones + bg.paste(whitestone,None,whitestone) + bg.save("img/"+item+"_white.png") + #filling with black stones + tmp.paste(blackstone,None,blackstone) + tmp.save("img/"+item+"_black.png") diff --git a/goban.py b/goban.py new file mode 100755 index 0000000..06c4176 --- /dev/null +++ b/goban.py @@ -0,0 +1,174 @@ +#!/usr/bin/python + +""" +the main file for WebGo. +""" +import sys,string +import cgi +import pickle +import psql,helper + +picklefile = "goban.pickledump" + +############################################################################### + + + +def display_goban(goban): + """ + gets: dictionary containing the layout of the used goban. + returns: string containing the HTML code for a clickable goban. + """ + data = "" + + hoshis19x19 = [(4,4),(4,10),(4,16),(10,4),(10,10),(10,16),(16,4),(16,10),(16,16)] + hoshis13x13 = [(4,4),(4,10),(7,7),(10,4),(10,10)] + hoshis9x9 = [(3,3),(3,7),(5,5),(7,3),(7,7)] + + + data += '
' + try: + size = goban["size"] + except: + #TODO: proper error management + raise "[EE] display_goban: got broken goban dictionary." + sys.exit(1) + for x in range(1,size+1): + for y in range(1,size+1): + # check for white or black stone + if goban[(x,y)] == 1: + stone = "_white" + elif goban[(x,y)] == 2: + stone = "_black" + else: + stone = "" + sx = str(x) + sy = str(y) + # check position: + if (x == 1) and (y == 1): # upper left + data += '' + elif (x == 1) and (y == size): # upper right + data += '
' + elif (x == size) and (y == size): # lower right + data += '
' + elif (x == size) and (y == 1): # lower left + data += '' + elif (y == 1): #left line + data += '' + elif (x == 1): # top line + data += '' + elif (y == size): # right line + data += '
' + elif (x == size): #bottom line + data += '' + else: # hoshi or empty inner field + defaultfield = '' + #too lazy to make special images for hoshi fields with stones: + if goban[(x,y)] == 1: + hoshifield = '' + elif goban[(x,y)] == 2: + hoshifield = '' + else: #empty hoshi + hoshifield = '' + if size == 19: # 9 hoshis + if (x,y) in hoshis19x19: + data += hoshifield + else: + data += defaultfield + elif size == 13: + if (x,y) in hoshis13x13: + data += hoshifield + else: + data += defaultfield + elif size == 9: + if (x,y) in hoshis9x9: + data += hoshifield + else: + data += defaultfield + data += '
' + return data + + + + + +def string_to_tuple(str): + """ + gets a string. If the string contains '(',')' and ',', then return + a tuple processed from the string. If the partial string is empty, then + -1 will be returned for that value. + """ + if (str[0] =='(') and (str[-1] ==')') and (string.find(str,',')): + splitlist = string.split(str[1:-1],",") + returnlist = [] + for item in splitlist: + try: + returnlist.append(int(item)) + except: #empty string + returnlist.append(-1) + return tuple(returnlist) + + +def process_form(goban): + """ + gets a goban dictionary. + + reads out the returned CGI form. + if the goban has been clicked, return a (x,y) tuple of the position. + + """ + #get instance of fieldstorage + form = cgi.FieldStorage() + #if form == empty (which means if page is displayed for the first time): + if form.keys() != []: + #cut out the name of the clicked button + namestring = string.split(form.keys()[0],".x")[0] + position = string_to_tuple(namestring) + ret = set_stone(goban, position) + if (type(ret) == type("")): + return (goban,ret) #return old goban and error string + else: + goban = ret + return (goban,"") # return new goban and empty string + + +def set_stone(goban, position): + """gets a goban dictionary and a (x,y)-tuple. Returns a modified goban.""" + turn = goban["turn_number"] + if (goban[position] == 0): #empty field + goban[position] = (turn % 2) + 1 #even turn: white tone (1), else black stone(2) + goban["turn_number"] += 1 + #now write changed values to database + psql.update_goban_field(goban["name"],position[0],position[1],(turn % 2) + 1) + psql.update_turn_number(goban["name"],goban["turn_number"]) + return goban + else: + return "Could not make move: Field not empty." + +############################################################################### + +def main(): + # Print the required header that tells the browser how to render the text. + #(currently done by error logger) + #print "Content-Type: text/plain\n\n" + + #do stuff + data = helper.header() + + #read goban table from database + tmplist = psql.read_table("test") + #make a dictionary out of the list + goban = psql.fetchall_list_to_goban_dict(tmplist) + #print goban + + (goban,str) = process_form(goban) + data += "

Turn number: %s, %s Player's Move.

" % (goban["turn_number"],("White","Black")[goban["turn_number"] % 2]) #eleet ;> + data += display_goban(goban) + if str != "": + data +="\n

"+str+"

\n" + + + data += helper.footer() + print data + + \ No newline at end of file diff --git a/helper.py b/helper.py new file mode 100644 index 0000000..cdb4d3e --- /dev/null +++ b/helper.py @@ -0,0 +1,38 @@ +def header(): + """return html header""" + data = """ + + + + """ + return data + +def footer(): + """return html footer""" + data = """ + + """ + return data + +# create a unique session id +def generate_session_id(): + import md5, time, base64, random, string + m = md5.new() + m.update(str(time.time())) + m.update(str(random.random())) + return string.replace(base64.encodestring(m.digest())[:-3], '/', '$') + + +def check_for_int(data): + """ + gets a string. if string is an integer: return integer. + else return given string. + """ + #check if value is int + num = [n for n in data if n.isdigit()] + tmp = "".join(num) + if tmp == data: + ret = int(data) + else: + ret = data + return ret \ No newline at end of file diff --git a/img/bottomleftline.png b/img/bottomleftline.png new file mode 100644 index 0000000000000000000000000000000000000000..9be1f27d353199f32695afc811372bcc4ae4af29 GIT binary patch literal 5708 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 RM%-FQv^KXRJvODV{tp?eOARg2JC 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 MU2ONjsHeo_uA7XruA%NP@K^W3aA|K9 zNDDN*TB9`8o=W4v@Z4{T_Mc6pvvqIUsRFkf!$Gj&_X$^HIdqqTBKTFWDr?y@StmzX z+mtf*B)kT&X8^Z{ey>zjK>WPVXGy2_i{4|7{d9wcdlAq-s>k<)9uUG%<+Fv7u!a8-=E=${MsbThmtzR6`x!= z)NGK4UBH)?aZT)-0!9b!5cyYG`NjzuLxz&J4cw>{5+u_0J_xf^4lQ?AGAe*YNRoRP zfiV5i2QPsl2YwY|`RH`Q@0+>Y2&kCqvD?t+$tc|+k7A=Fi|4Sz+XEBLY|EPsMi@~} z2mV3u%+R3L9oclmbnlZdWGmieIn>XA&Mom_1b=0Oa|o@pinA(AolD1d(+ZRUu+Ier z&~{rznA1L$IPm3rdzXvr`V~h_NgGkCU={j5FN|T! literal 0 HcmV?d00001 diff --git a/img/bottomline_black.png b/img/bottomline_black.png new file mode 100644 index 0000000000000000000000000000000000000000..85f86d5011e8065d7c27c178a0d2c33e0c6a4d82 GIT binary patch literal 4357 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 Kws~TOCI1gm1Q|>K literal 0 HcmV?d00001 diff --git a/img/bottomline_white.png b/img/bottomline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..edadbfdb221a95b15c03d9ea98f7075942bbce7b GIT binary patch literal 4761 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 R_~z=DKub*@-l$?1^M6cgh2{VN literal 0 HcmV?d00001 diff --git a/img/bottomrightline_black.png b/img/bottomrightline_black.png new file mode 100644 index 0000000000000000000000000000000000000000..a30627d36e1f82ac8ae5360df05c5600656c3cc6 GIT binary patch literal 4343 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 UL4jzxtn17n8yD+GmU!y_0FZVVS^xk5 literal 0 HcmV?d00001 diff --git a/img/centerline_white.png b/img/centerline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb550a088a98540cea8cec61f9dc8dbf4026db6 GIT binary patch literal 4771 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 WkJb>F+gXE;B9^9yO&%CgSpNqetm$z8 literal 0 HcmV?d00001 diff --git a/img/centerwhite.png b/img/centerwhite.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0aaba0cd0c95fac4c7e046c0cb835e1dc9b83f GIT binary patch literal 3405 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 yGN2G8Gf1x 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 literal 0 HcmV?d00001 diff --git a/img/hoshi_black.png b/img/hoshi_black.png new file mode 100644 index 0000000000000000000000000000000000000000..a3aa587bd1c93632398781f4760a21204d8612e6 GIT binary patch literal 4364 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 UL4jzxtn17n8yD+GmU!y_0FZVVS^xk5 literal 0 HcmV?d00001 diff --git a/img/hoshi_white.png b/img/hoshi_white.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb550a088a98540cea8cec61f9dc8dbf4026db6 GIT binary patch literal 4771 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 WkJb>F+gXE;B9^9yO&%CgSpNqetm$z8 literal 0 HcmV?d00001 diff --git a/img/leftline.png b/img/leftline.png new file mode 100644 index 0000000000000000000000000000000000000000..691cd26bc327e335b38131926f4c975c1e5a15f4 GIT binary patch literal 5700 zcmXX~Wk8b+7X>zI45UU$cL}5WmBHwi?iei~-8n!Q(p^f3fRrK#QZiC0Q3+}3R0O01 zVc&%B$DaK>&%O7YbI*NH`nqbQAO;W)4i2e?I{X3lU-aLPhyeR!zMt5LgF{220f!j{ z7Xy1>UPwji=oQQ%U7Wghw3*={4nx}V(&f7YXqWb@FUAupMFjH>h7bsy^F_p)?}C31 z_YH6%L@M6X2FWWwflhe8XDIo@k12%Tx)cyM&G@?J{2~Z7egiDGw=0xh(tBL{yN*Yp zV=JlZC*ZAE_;sj|uGt14${J1j!aWWJc63wUy~lJAYCJsi0GMj9eC|$aOp?a;SDc(~ z!%HD#UB>c-xB>?I)))-u2+X$+N)G73RUg*8#+b}=`O?Z%{Q60?V!!_|J&v%6v}2&y z861OSCqunDtH?_FYF^!e(+c3RMiNO|_XnffzjZfvAXOUwyV~F59%B6F@FT{7!{R%3ME;6<%(fjU zxo5w5d`0Ewb(+a<9RAE_FOy<%GBs{^`e6*`k6`}=Sv%u4mP4Ox=J5I!pQjrk1_OIc zvp!e43d3uu?8d1{XkOKj@nB{vj<~nO{|C%4poxWo`_`M|eKCFeBI=!KKY+O}aHOp! z5vg32nSRtUZQOO+>=X*c=HdHF8Ywj;i2 z>b$Iz!bf2-;_>SJ&v9Ut1&_OVyo&x0m8C(3Cjv$ni#tU#pJQ0s9_aIsBzz(f)M`lr z#V&_X@3T6269iK27s^|Fed|i=Xm)ryC<~jr=J&lTjy5#M74|U_&cb{3_{rxYsI^&R zmSsjh@nY1T3dkBG(aNBVh1?dbfGdi=^s^aEI23`RUlgr--Y94}!prE>IY z+->bQq2T)#f3WfZH-%I@k?`Fhgalp%YpEI|;2WR#fT*-(TSJQK9LZRsoBgkFgY4yE z?|^Mk5PD?U+VR=gCEz`PKh#s;+LpQuNSDf@$YHU98;<)ANFG}smMneM^l~JhuQ4xS z?kFv2pe~&)QonbBiGJO_{DIL9(!g&jFw`2B*hDQ zMw@lN#fR4&bjfUkN;iKj0hWrcCL)>0cv{#?qcdI*aUnV}~7O>Y9mn%dEUKQ~nh zX2Zyk`s4!_&NypVkE+#JtI>Z$gzUZ>XGsoMJ{B39F0TpE9uor*lRfzc`gQM5#F!|( zlOmB;KPR1YP-Z^cVZCGdP_mqAM*Deyw|US65aQt9#KKML0(@e(xS}jN;a@-{Lh>n$ znI5l*fhYGI@UOLkIT~cWisXP11%KpnFQz0>nv2pQSKDv<57IhtRsaSx+`d3cOYy0@ddP)2%A=413+X9f4DcjUJs z=L}>4EToR{=SBB%7bzQjzF59`H)@N~r=z#Qzjuyo~u zCaPwldbO&ZPv+bcgsRPaxq#@KGc;8>~Bb-QqmsE^Q`fIY6s)uLZnDqfS?2^1e z@6bIyuYgRkn2-ADbC@0n%0a3&I{W;VJ~6h;*5246~-E~KU(skg|e_U_WW!^=A~faY!=La&xX z>pW<+Wqvuu$tXK`N!t?dEq&?&^BJGx-Sl$`Mi#3GR{p}00Q-6M$inC)nseXb9nw=_ zPi46(r>U@kJ3Bc8T<|+x#nb8w&H&XoCEn_!q_?C zg~2Nv6sE!R@(~Phz8n47Iv;MhT~x2u7YbKDVBw>=flg<&O01av8L z2CbZotBWBNii!(De)WmER}Qu)hi5Us)a_T0>5ZK1-C zi`y61Q!gyuQ~k#WpGR7ZoO>Sli_|W9sEAT|t2x6Zn@?-UT{A{!i=%Gz2*;xJLdp9( zH7v*vFeU77clN;vtigS*9<6GzZhke-#hbL%7ZQS9yg%jey%O^3lUH-ugC#3U=3s
") + if form.keys() != []: + + if ("name" in form.keys()) and ("password" in form.keys()): + #extract name and password + name = form["name"] + password = form["password"] + sessionid = form["sessionid"] + origpassword = psql.get_user_info(name,"password") + #check if user exists (else we would get an error string) + if origpassword != "no such user": #no error message, now check password + req.write("hier bin ich in der Schleife.
") + req.write(str(origpassword)+"
") + if password == origpassword: + #login accepted + psql.set_user_sessionid(name,sessionid) + psql.set_user_timeout(name) + #now display list of games. + game_overview_form(req,name,sessionid) + else: + req.write("Login incorrect. Please try again.
") + req.write(login_form()) + else: #no such user + req.write("Login incorrect. Please try again.
") + req.write(login_form()) + else: #one of (name,password) is missing: + req.write("Please enter your name and password.") + req.write(login_form()) + + +def game_overview_form(req,user,sessionid): + """ + gets the name of a user and the queue of games. + prints a form with the option to select,create and delete games. + """ + data = helper.header()+ """ +

Current Games:

+
+ """ + gamelist = psql.get_user_game_list(user) + req.write(str(gamelist)+"
\n") + #display list of current games + counter = 10 + tmp = "" + for item in gamelist: + if (item != None) and (item != "None"): + tmp += ' name="game" value="%s"> %s\n' % (item,item) + tmp += '\n' % sessionid + tmp += '\n' % user + #later write partners name and whether its our turn or not + #data += "Your partner: %s." + tmp +="
" + counter -= 1 + if tmp == "": #no current games + data += "You don't have any running games.\n" + else: + data += tmp + data += '\n\n
' + #now comes the option for creating new games. + data += "

Start a new Game

\n" + if counter > 0: + data+= "You have %s free game slots.
" % counter + data += """ +
+ + + + +
+ """ % (sessionid, user) + else: + data+= "Sorry, all your game slots are in use." + #display "You have ... free game slots" + Button "create game" + #bei "create game neue funktion zum Erstellen + Mitspieler aus Liste auswählen. + data+=helper.footer() + #check for timeout: + if (psql.get_user_info(user,'timeout') >= int(time.time())) and (sessionid == psql.get_user_info(user,'sessionid')): + req.write(data) + else: + req.write(helper.header()+ 'your session timed out'+helper.footer()) + +def login_form(): + """ + print welcome message and html form. + """ + data = helper.header() + """ + +
+

Name:
+

+

Pasword:
+

+ +

+
+ """ % helper.generate_session_id() + data += helper.footer() + + + return data + + +def create_new_game(req,user): + """ + create a new game for user. + gets: request object, username. + """ + + + +def main(req): + #get instance of fieldstorage + form = util.FieldStorage(req) + if "sessionid" not in form.keys(): + req.write(login_form()) + elif ("create" in form.keys()) and ("username" in form.keys()): + #user wants to create a new game + create_new_game(req,form["username"]) + else: + process_form(req,form) diff --git a/main.py b/main.py new file mode 100755 index 0000000..5ca513b --- /dev/null +++ b/main.py @@ -0,0 +1,73 @@ +#!/usr/bin/python +""" +simple cgi wrapper for a cgi script, prints the error of the script as html +taken from http://gnosis.cx/publish/programming/feature_5min_python.html +modified a little +""" + +from mod_python import apache + +import sys, traceback +import init_webgo + +DEBUG = 1 + + +def handler(req): + # "Content-type: text/html\n\n" + req.content_type = "text/html" + try: # use explicit exception handling + #reinitialize database + init_webgo.main() + + login = apache.import_module("login") + login.main(req) + return apache.OK + except: + import time + errtime = '----- '+ time.ctime(time.time()) +' -----\n' + errlog = open('/tmp/cgi_errors.log', 'a') + errlog.write(errtime) + errlog.write(ErrorMsg()) + data = """CGI Error Encountered! +

Sorry, a problem was encountered running WebGo.

+

Please check the error log on the server for details.

+
"""
+		data += ErrorMsg()
+		data+="
\n" + req.write(data) + return apache.OK + + + + +def ErrorMsg(escape=0): + """ + returns: string + + simualtes the traceback output and if argemument + set to 1 (true) the string will be + converted to fit into html documents without problems. + from Dirk Holtwick + """ + import traceback, sys, string + + type=None + value=None + tb=None + limit=None + type, value, tb = sys.exc_info() + body = "Traceback (innermost last):\n" + list = traceback.format_tb(tb, limit) + traceback.format_exception_only(type, value) + body = body + "%-20s %s" % ( + string.join(list[:-1], ""), + list[-1], + ) + if escape: + import cgi + body = cgi.escape(body) + return body + + + +#start(req) \ No newline at end of file diff --git a/mptest.py b/mptest.py new file mode 100755 index 0000000..d91cae8 --- /dev/null +++ b/mptest.py @@ -0,0 +1,7 @@ +from mod_python import apache + +def handler(req): + req.write("Hello World!") + return apache.OK + + diff --git a/old_functions.py b/old_functions.py new file mode 100755 index 0000000..fdd3415 --- /dev/null +++ b/old_functions.py @@ -0,0 +1,51 @@ +def init_goban(size=9): + """ + Returns an empty goban in the form of a dictionary where the keys are + x,y-tuples: (1,1) is the upper left corner, (9,9) the lower right one + for a 9x9 goban. + The additional key named size contains the length of a side of the goban. + Content of a field: + 0 == empty field + 1 == white stone on field + 2 == black stone on field + Field turn_number: Current turn to be played. Even: white, uneven: black. + Optional argument size: define length of a side of the goban (one of + 9, 12 or 19). Defaults to 9. + Returns dictionary. + """ + goban = {} + for x in range(1,size+1): + for y in range(1,size+1): + goban[(x,y)] = 0 + if (size == 9) or (size == 13) or (size == 19): + goban["size"] = size + else: + goban["size"] = 9 + goban["turn_number"] = 1 + + #some stones for testing purposes + goban[(1,2)] = 1; goban[(2,1)] = 1; goban[(2,3)] = 1; goban[(3,3)] = 1; goban[(6,7)] = 1; goban[(6,9)] = 1 + goban[(2,2)] = 2; goban[(1,3)] = 2; goban[(4,7)] = 2; goban[(4,9)] = 2; goban[(5,8)] = 2; goban[(7,9)] = 2 + + return goban + + +def save_goban(goban): + """gets a goban dictionary and pickles it to a file. + """ + try: + f = open(picklefile,"w") + pickle.dump(goban,f) + f.close() + except: + print "error: could not write to file "+picklefile+"!" + +def load_goban(): + """trys to load and return a pickled goban. If this does not work return + a newly initialized goban.""" + try: + f = open(picklefile,"r") + return pickle.load(f) + f.close() #datei ist jetzt genullt + except: + return init_goban() \ No newline at end of file diff --git a/psql.py b/psql.py new file mode 100755 index 0000000..f0b1df3 --- /dev/null +++ b/psql.py @@ -0,0 +1,274 @@ +import helper +import pgdb,sys + +dbusername="webgouser" +dbpassword="webgopassword" +dbname="webgo" + + + +#pgdb.connect(connect_string) -> connection +#connect_string = 'host:database:user:password:opt:tty' +connect_string='localhost:'+dbname+':'+dbusername+':'+dbpassword +db=pgdb.connect(connect_string) + + +def create_table(name,layout=""): + """ + create_table(name:string, layout:string) + returns name if successfull, None if not. + + + simple function to create a table. the function itself would just + create an empty table with the command 'CREATE TABLE ();'. + The real layout is given to the function as an argument of type + string. This string contains all column declarations in SQL syntax: + "var1 real, var2 int" + name is the name of the table + + """ + executestring = "CREATE TABLE %s ( %s );" % (name,layout) + sql_one_liner(executestring) + + + +def insert_into_table(table, content): + """ + gets the name of a table and a content string. + executes INSERT INTO name VALUES content; + """ + executestring = "INSERT INTO %s VALUES %s" % (table,content) + sql_one_liner(executestring) + + + +def drop_table(name): + """ + gets: name of table. + executes DROP TABLE + """ + executestring = "DROP TABLE %s;" % (name) + sql_one_liner(executestring) + + +def sql_one_liner(data): + """ + gets:SQL statement + creates a cursor, executes , closes cursor. + """ + cursor=db.cursor() + cursor.execute(data) + # Commit the changes + db.commit() + cursor.close() + + +def create_goban_table(size): + """ + gets:size of goban. + creates postgresql table containing goban data. + returns: name of created table. + """ + tablename="test" + data="line varchar(15)" + for i in range(1,size+1): + if data != "": + data += ", " + data += "x"+str(i) + ' varchar(15)' + create_table(tablename,data) + #table created, now fill the table + for i in range(1,size+1): + tmplist=[] + tmplist.append("y"+str(i)) + for k in range(1,size+1): + tmplist.append(0) + insert_into_table(tablename,str(tuple(tmplist))) + #ok, goban itself has been created and filled, + #now insert additional variables + tmplist=[] + tmplist.append("turn_number") + tmplist.append("1") + insert_into_table(tablename,str(tuple(tmplist))) + #size of goban + tmplist=[] + tmplist.append("size") + tmplist.append(size) + insert_into_table(tablename,str(tuple(tmplist))) + #name of goban (=name of table in database) + tmplist=[] + tmplist.append("name") + tmplist.append(tablename) + insert_into_table(tablename,str(tuple(tmplist))) + return tablename + +def create_user_table(): + """ + creates a table named users with following columns: + name - name of user + password - passsword of user + game1 - the 10 game slots of this user contain names + ... of goban tables + game10 + sessionid - id of current session + timeout - when does session time out? + """ + data = "username varchar(15)" + data += ", password varchar(15)" + for i in range(1,11): + data += ", game"+str(i)+" varchar(15)" + data += ", sessionid text" + data += ", timeout int" + create_table("users",data) + + +def read_table(table): + """ + gets the name of a table, does a + SELECT * FROM table; + returns output. + """ + cursor=db.cursor() + data="SELECT * FROM %s;" % (table) + cursor.execute(data) + # Commit the changes + db.commit() + ret = cursor.fetchall() + cursor.close() + return ret + +def get_user_game_list(name): + """ + gets a username, returns the list of games for user. + """ + cursor=db.cursor() + ret = [] + for x in range(1,11): + data="SELECT game%s FROM users WHERE username = '%s'" % (x,name) + try: + cursor.execute(data) + # Commit the changes + db.commit() + ret.append(cursor.fetchone()[0]) #[0], because return is a list + except: + ret = "could not get info of all games -- table corrupt?" + return ret + cursor.close() + return ret + +def get_user_info(name,infotype): + """ + gets the name of a user and the type of requested info. + returns info from database. + """ + cursor=db.cursor() + if infotype in ("password","sessionid","timeout"): + + data="SELECT %s FROM users WHERE username = '%s'" % (infotype,name) + try: + cursor.execute(data) + # Commit the changes + db.commit() + ret = cursor.fetchone()[0] #[0], because return is a list + except: + ret = "no such user" + cursor.close() + else: + ret = "Are your sure about the infotype?" + return ret + +def set_user_sessionid(username,sessionid): + """ + gets username and sessionid, writes sessid into database + """ + executestring ="UPDATE users SET sessionid = '%s' WHERE username = '%s'" %(sessionid, username) + sql_one_liner(executestring) + +def set_user_timeout(username): + """ + gets username, sets timeout to time.time + 30min + """ + import time + timeout = int(time.time()) + 1800 #current time in seconds + seconds for session + executestring ="UPDATE users SET timeout = '%s' WHERE username = '%s'" %(timeout, username) + sql_one_liner(executestring) + + +def update_database_field(table,column,line,data): + """ + gets: table name, column name, line name, new content for field. + executes an SQL UPDATE statement for line. + """ + #TODO:schreiben + executestring ="UPDATE %s SET %s = '%s' WHERE line = '%s'" %(table,column,data,line) + sql_one_liner(executestring) + +def update_goban_field(table,x,y,content): + """ + gets: goban dictionary, x,y coordinates, new content for field. + modifies goban in database. + """ + update_database_field(table,"x"+str(x),"y"+str(y),content) + +def update_turn_number(table,new_number): + """ + gets: name of table,new turn number + modifies 'turn_number' in table + """ + update_database_field(table,"x1","turn_number",new_number) + +def add_webgo_user(name,password): + """ + adds a database entry for a user. + gets: username and password + """ + #size of goban + tmplist=[] + tmplist.append(name) + tmplist.append(password) + insert_into_table("users",str(tuple(tmplist))) + +def fetchall_list_to_goban_dict(list): + """ + gets the output from read_table (a list), + returns a goban dictionary. + """ + #create dictionary + ret = {} + #get size of goban + for item in list: + if item[0] == "size": + size=int(item[1]) + ret["size"] = size + #populate dictionary with goban field + for item in list: + if item[0][0] == "y": #goban fields + #get current y coordinate + y = int(item[0][1:]) + #fill dictionary for current y coordinate + for x in range(1,size+1): + ret[(x,y)]=helper.check_for_int(item[x]) + else: #other variables + ret[item[0]]=helper.check_for_int(item[1]) + + return ret + + + +def test(): + #create_table("test") + drop_table("test") + create_goban_table(9) + update_database_field("test","x1","turn_number",4) + list = read_table("test") + print list + dict = fetchall_list_to_goban_dict(list) + print dict + print dict["turn_number"] + print dict["name"] + print type(dict["turn_number"]) + + + +#test() + + diff --git a/test.py b/test.py new file mode 100644 index 0000000..e2a1d50 --- /dev/null +++ b/test.py @@ -0,0 +1,3 @@ +def hello(req): + x = "Hello, world!" + return x

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 HWY+%zi*Ny8 literal 0 HcmV?d00001 diff --git a/img/leftline_white.png b/img/leftline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..514e7a57fea9ecd4cf00f86e85e0c4a515d77245 GIT binary patch literal 4773 zcmYLNdpwi<`^RRCVT_uRQ%*(MOiwCo&WD7hBuO)KNJ6Pdn9XsSP&^VjE1?jbP&RX_ z9P&sJay~pFlhZPG|E8zDzt8Kn-LL(z>v~`B_jUT*G)H?Y39%hw0s;aOHrD3H`A@yA zk0^xyt%yyi5)hE_w=p+45tF3QDeQD8^%$XD)5HtMxqMfb@b zi!8_h(Me7Y>AfEDbXaF&@jG5nPShgk6P`Xg5B3sT>XX?UzAUZ#%qJ6C-FMkHeE|}7 z@+r8$gK*E_t3zDbQn{v4-So|e^Pp##a9-GcdzVQN`7A@C*e`|#Bb~RN-M5P!cJf`{ zaqunt2**$2qvy(1z!VnnJX>YB5?VH5$vA=$BhoU%m4fHhIg4dg#A9=W~zCt%++z4PzpTL!|z zRvXJqsBq0l(dieNR8oPM1MRGYpuJPC+URA2x<_##?MnYS>@d33h=NCT2l{KmuY-h7 zxJ8NWRrA{+S!D$|Z;|*?0N<1h7fPiYonh~1o7xWRr`W_kJmshz8WDCv;&O{Q98L6q z)wA4MZlw4lmH(EH8+$$I4@{LEn7p#h)9B{aUF66zgVhov-D6zefg3&U?n5hsyF$2& z^H*HxX?f7E_wh9R>dg@K-VY-n4bzl`XhhJ5M`(G0w>TB`Q9eWf&`+)M6EZ-=}$XZ0z8mg~kYy>`jmlk@gytd)$QmMWTN_f2S!asSG#{BEs5Q?2IPDM>>=t@5u@GQzL#HEBbadXJor zemQnE*4xz8;%VF+@WXu5Da$96tVe4ZWh~#<@->HFKN{aC1*97;nx=p=qE15tistP@ z49?iaRUdlsZ8CiDVny?L?EXa8*%CFenVQ;N6!KBpFl1TC16elLYm#T;Zt(n zDHs(vg#?~3Rb%-d!dAS9_tSr}jljFjU{nN~+eds^9jcPl%RaH<_o71S#j#*)j&avF zuY0!9v7i_m8SwJugAZ_Ndc~vSTQd5m)JX`TWx><^A#EeF=GL}?DW-M^bFi$5dXd@( zVVP4xC-cNjK1Iw~1&wK@KK{$4quhTQv1{^x$z|7LF}^sa1~W76lJ403F%f5E8>oXC}|=6^%qD6YQ0p?}<&TB^6~XbjHSv)LY0rqj9O z%Y!NC78d#)v{)k!ZZS+x4A225kIMV2#g0IquPAP#S}htp|7tEH<8iH(2-;Iqx!zo% znEbHt&{=0lw0~t1yx1{FsB<7aBVc_sjQrhx8ms&OmDv!OP^&ts83W>`Nw&V9$2))f z>Nl=sUoC6y(T+;D(C)Ry8Zm`9p{GnH^ltvqMspXzU$OR}#iDVt7Tw%k`gZUmHtKyZAD?)l zcD8hmVX+r97CwE(8rRgQp1t<6za&nzul5DX!sHHHE2eaLbaUr&@0E@N)H9+-{#rUW zBqN~ueR)ujWI6QwEU*clj`$!qB`O)}O;Z)oY>`Qq*z!hPUs5_gfX1LvL3(J^Ms(~y z4FJHpr#UE_dh!ly9$MtWoTdSNMuKnWtRIOf?uNk($hn|d@!YW9CcN{@n0y! zG>4Ns0fj*Pb2we>WD12MeNWf%j$GL7p6B|QgGo1y+B(Ic99?oI^38?^iL)jp!_UoM zrpE{b5=Sa2J(moiH@MtnlWxXx!Nn7CM&2!!q2h;<32R{0aXn?PD>0gRKf&MeY7Ti5 znh=9wef>rg3y0}3U5I7eIe>@R;I1W)V#N`x1}q@|pY8CERT5DsIGDNl0&SXRVJi*4 zQ+I=BT^U5cH_p^dU!b13WeTRDYR+A~qzh_NUKX4(tNAdnr^IZ=q6u4Y#yVl%Py_SX zO|M@8_LK?w53M)Q#pYr`tO_h0M!qYLgxz;@urBj^Bs~o^zpc`RXuIXb_)Y^#6lG4~ zd;h6=c6f0?sz_~PjjIIOy&J?gvPI_@kx1aI09aNRxgAD_wKqfu|Cp4QKMltxe?|bJ zp;W;-&5;A^WM6vTr1neA5A*Sr_s0s0}x}c42qyxjS z^n5^hM|=B5JSCMvp=Hv3C)&EyK2^Dur2WB*>?LBTP;&~|MQ6P=$_=fzVU=bIr1p9) zfy1U+tlyOU1osDL8@dVY4ZD{ikCd0^>23UpgxZGEE6KbUK_Z!#9{d0^>GV%{s#K@R zE0iq*MrP4Q6!*(2t%iOwX6DKO#Xbj@^U}y=)#Tw5O&@O$pYea`GJv2FS-WS@a<@Pa}CeFVY`z2t>Xq z5(zGwF`?dx08$MXrJAJy{Ff7zhEe=1vCdJ3FS!^|;M-;7CWu~qkEHeY|1XCw2*e^o zj8!}$i#V(WDCCO6M(Y?fA(|&W37uG$3IV%2p!kO^E-qHN!EI%9vXg()=t1%(5qPX7 zhPIj-y?dF#27i1CG=+{~KO(HJC*)~5?n-jsQwS1NF~MJZfQ8xVz+k`KdaSp$v9lI+ zL4Fq#-y;(0quk<0*1�qK_m*X~HF~e0DPy$bfvUy|EX8e}4b#=gKq|guq}}@t-Ts z1uu#QW8jlCa!?iETNOQkAjwwG3=#C%^DOS?M=g4TZaU=O6-r!RPfi_GLV#GUF9MA> zfHe_(_U$@@%z_gVMc z<~jgu_iM4R(VNL35O9(|0b~xNH_o(4Se^fyK;Uf5u2fVs02maH+x6Quaf6#Nx>iAk zopQ(?^Wgxwqd>!Okl6tjl)aY)|oCg^o)3~}2|&g#!^@gk=JXL!+j`9qCg z`&3vaieDG}zBl=9vG9~UzrJ}qE|bBQdM&9u0sR=Kta^=oL+IIw#sIf7reApuuB*xA zsMcN06eBBSedPL&?iEiTdZs)dFK^R_;6)_9P@h@GpTDvK3$G!9fgUg+ zri>la_?R!1L3oeNPdE%A#3C||+FRfp6)D=2wBy^TqJsl|5kq}4)M+!GREJRe_(c5k zYNXUamqNl%1-0zG`%Q}3LR*$=GSQMalz_!>;LT=enC+*W7GbyO5jf$XQIL^NH3$YhY3zrB=N^hXNPCjTYDJap zNR)9I+e5< zQ2tIHHHuwuzw8RFrNqWM4eod@Ibx}LI6f&UU74!jBDyM>f(g;B3W8*C?l~k@v{^Xj zLXoLBJCL*ZrlaHL%HPh-_gCwt!rlxzXFbd9-2R@7;)WRxjIVy^`nm=Y+x_;g*y>yQ z0R-X-w4R|B^^NYTaPF5b<@eB%CV04j&*uWXui6jwCwa?>Z>E8)%XR$KdK1#K&PZD{meP_icVqwQbZC{YH#5ASfE)KH*k!cC)1zFtdo6U2 zjhC{x^yg?>u&rPD#pb2ZzMR$ctnFUUzFcf9aMSI<{|)r`a|7%mUiBu=mb$M6ryf0$ z;KaS(HbcKIXCOYipN5p|?AxU{_d+{IG3$&- z{_#(byI%`)k4DJ|1;lx?EJ8JW%b@Nld;Bh3J$_j$)xR^(_PMFi_BX$B%RKXp7zhmm zS>0Ni+3a$)J-D+@$$ds%KN|dWQsiJa?D$x(hq2Zm)N{w4ZiRd5J|YW8%O}gl%HJ)k zRcj7?>oFt#R4Pp4C{`VufF`INYuZDv%gE3}OBj0$;%PJZ07)eBLc&-2>pKy>p_{*m Z00{u{G%ahNlKidKXk%e-{=}3({XZN2;a30v literal 0 HcmV?d00001 diff --git a/img/rightline.png b/img/rightline.png new file mode 100644 index 0000000000000000000000000000000000000000..13f413fc37abfacd6342ad20b31deb3f9958be69 GIT binary patch literal 5689 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 C|8Ob* literal 0 HcmV?d00001 diff --git a/img/rightline_black.png b/img/rightline_black.png new file mode 100644 index 0000000000000000000000000000000000000000..db9ec998157424f43143ebb265f7c917a6f6a6f2 GIT binary patch literal 4350 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 LJ6k=qz*GMZB^D8T literal 0 HcmV?d00001 diff --git a/img/rightline_white.png b/img/rightline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..70f1e6e1299b6252a1e07501b54a4925a13e852c GIT binary patch literal 4769 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 OC(zY0K-Oy5Mf?vQ=WU1p literal 0 HcmV?d00001 diff --git a/img/topleftline_black.png b/img/topleftline_black.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef0fe75a939566504e350c72fbebdcb9d8d31b3 GIT binary patch literal 4336 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 literal 0 HcmV?d00001 diff --git a/img/topleftline_white.png b/img/topleftline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..f52577dd424a416cdacf81942ed8b9828fa87672 GIT binary patch literal 4762 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 JG^p4`{Ra%nQ2GD> literal 0 HcmV?d00001 diff --git a/img/topline_black.png b/img/topline_black.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2d4c81e01efd551af72e00450e53d0909e3dee GIT binary patch literal 4351 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 IEwH5j12az^KL7v# literal 0 HcmV?d00001 diff --git a/img/topline_white.png b/img/topline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b24c02b278baa3d512f6a37ff6634746e9f7196e GIT binary patch literal 4766 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 OQNr57j`-M&ME^ff?EWAC literal 0 HcmV?d00001 diff --git a/img/toprightline.png b/img/toprightline.png new file mode 100644 index 0000000000000000000000000000000000000000..3f20c7a512c61533c21d96253f44c045e268d780 GIT binary patch literal 5700 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 literal 0 HcmV?d00001 diff --git a/img/toprightline_white.png b/img/toprightline_white.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2df2a69a4aea947907ae3a7c2b67062b595dae GIT binary patch literal 4761 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 WG8tUClDiS8nZeW5&t;ucLK6V;W;Hkf literal 0 HcmV?d00001 diff --git a/imgsource/bottomline.png b/imgsource/bottomline.png new file mode 100644 index 0000000000000000000000000000000000000000..76fa4a0ac8387e894e32ed8569bc6d4c747892e4 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=0wlMXIamQH&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVm4jVKN@M4)!fK$9Y>8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)Dkt0opTA7xF_s*zjE@uTy}N&4j4%JwVI9LKp4NK W9g~6nr`v)+-3*?telF{r5}E*|tT(0r literal 0 HcmV?d00001 diff --git a/imgsource/bottomrightline.png b/imgsource/bottomrightline.png new file mode 100644 index 0000000000000000000000000000000000000000..f70c0274edcc2716bff57bfe1fc493e69b927a74 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=0wlMXIamQH&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVm4jVGiZ9=)!vrWKTjCl~;+&tGo0?a`;9QiNSdyBeP@Y+mp%9Xhs^ISF8}L3w zH4muJ*we)^B;xSfYYTZ940xCwwO{?y-flc2gt7ci)vG1tw+}vH7KDO{bN;PjWY}<( Y+3hNmasA^yeV}#*Pgg&ebxsLQ0M^(vI{*Lx literal 0 HcmV?d00001 diff --git a/imgsource/centerline.png b/imgsource/centerline.png new file mode 100644 index 0000000000000000000000000000000000000000..fd339fb844a59227ba446bfe77fd5b3152b031c0 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=0wlMXIamQH&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVm4jVGkz4uE8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)DYE`mAs`@OUsKrFdgVm4jVGgHuM&^BGV`w!}4}#5q4VH#M(>!MP|ku_QG`p**uBLm?z1Rl(iUH{gAW zY93Hww5N+>NW|f{*9^H1IB>9D^gQ=!s%^if*r92L2_A;^*_GN+9DhT$KX}sI0R;>! zoGOOjmo9i`e(Xuxlh2zL*RS$@o~mv?=j5$*v+nBg=Lv$rL|t)JQzbU*d8_^dtzqzV L^>bP0l+XkKFdgVm4jVK%3=v`qC8MYw!}4}#5q4VH#M(>!MP|ku_QG`p**uBLm?z1Rl(iUH{gAW zY93IbrKgKyNW|f{*A@yg81OJ}%>RCW=UhbFdgVm4jVGRpPLLcqC9rw!}4}#5q4VH#M(>!MP|ku_QG`p**uBLm?z1Rl(iUH{gAW zY93Ibg{O;SNW|f{*EaGpIPfqTilqLZ`agYv=hN2{qbKdV&Zoxis35?>!qn)n>2K)n glg%v-VD8J`(eIfP_PFdgVm4jVG!l)>Dnjug~w!}4}#5q4VH#M(>!MP|ku_QG`p**uBLm?z1Rl(iUH{gAW zY93Ibk*AAeNW|f{=Qav581OI|&iPyJmsY@~wetBq7KVnlNd3IW*W90&)OB`1!4t;K Xs!Rp}#{xNlx*0rO{an^LB{Ts5FdgVm4jVGO?F2422r4pY>8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)DFdgVm4jVG+_>q_t_+}%Y>8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)D+N%5<+vpjq=pX+A)x3 zeXZpA`@Zx2v3EKT%Z7-*v%i;85HYN2W6Y)lqI<8~z(?h&*^O<3H0x{6;*Z`7{P7pI z3K7MIiP91!Gp%5f?srx~2;FWMNy*FpgcS7XJES7Z~7D5Ms)BUa`o%1|D1wq=J)}pc@ zq)xKy#FFVPBLQKYiBJv~>xo*TQa5R`zABga027^devxyi=)KsP$_(=$>1}n0>6CzQ<9Clgcke!rrAxJ~W0TC_83>$g%GQ*7+IBR_vCbF2opmnA7Ut(rN|O)5TkYmgoc3Vsa3Lu+KS97 z*PU#T5$h2vXcH+&Jt*n_JqQwSUVRW*H58WXYzqQl#buGZNXWDtnY24gUM{xxa$aZ7J+qXv$yGy3nG>5WUPI-tR%RjGV2=az+xZBfztEsxS>pF8eq~n zpa{bB6_vXov(~s%sn*(A`;l86UpJTT&q-T z8mMJDQ9iZ+%#m8O$nxjGWY*Z?4#fY$!F;;x*fWp>)E_^L0H=k{A literal 0 HcmV?d00001 diff --git a/init_webgo.py b/init_webgo.py new file mode 100755 index 0000000..ed2e628 --- /dev/null +++ b/init_webgo.py @@ -0,0 +1,23 @@ +import psql + + +def clear(): + try: + psql.drop_table("test") + psql.drop_table("users") + except: + pass + +def create(): + psql.create_goban_table(9) + psql.create_user_table() + psql.add_webgo_user("gast","gast") + psql.add_webgo_user("gast2","gast2") + + +def main(): + clear() + create() + + + \ No newline at end of file diff --git a/login.py b/login.py new file mode 100755 index 0000000..dee3a1a --- /dev/null +++ b/login.py @@ -0,0 +1,130 @@ +import psql,init_webgo,helper +import time +from mod_python import * + +def process_form(req,form): + """ + reads username and passsword from form + """ + #if form == empty (which means if page is displayed for the first time): + req.write(str(form.keys())) + #req.write("
"+"name="+form['name']+", password="+form['password']+"