[cpif] r377 - in trunk: . backend frontend-web
svn at argo.es
svn at argo.es
Tue Sep 25 00:26:07 CEST 2007
Author: jcea
Date: Tue Sep 25 00:26:04 2007
New Revision: 377
Log:
Primeros pasos para permitir que los usuarios intercambien
mensajes de forma privada.
Aun queda tela que cortar.
De momento, a menos que se sepa lo que se hace, *NO*
se debe configurar la instalacion CPIF para permitir
correo personal entre usuarios.
Modified:
trunk/TODO
trunk/backend/database.py
trunk/backend/upgrade.py
trunk/frontend-web/url_edit_config.py
trunk/frontend-web/url_edit_metatags.py
Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Tue Sep 25 00:26:04 2007
@@ -385,3 +385,37 @@
- 20070914: FRONTAL WEB: En el log de acceso web, registrar el usuario
autentificado en cada hit.
+- 20070924: El usuario "anonimo" tiene un metatag en el "storage" asignado
+ para mensajes privados. Obviamente no lo necesita.
+
+- 20070924: Cuando damos de alta a un usuario nuevo, se recorre toda
+ la lista de metatags, buscando los publicos, que son una minoria.
+
+- 20070924: FRONTAL WEB: Cuando se an~aden metatags nuevos a un foro,
+ el metatag de mensajes privados de los usuarios ya existentes aparecera
+ en medio de los otros metatags, en vez de al final.
+
+- 20070924: De momento no permitimos que los usuarios tengan mensajes
+ privados entre ellos. Para evitar que abran hilos nuevos en metatag
+ de mensajes privados, implemento control de escritura en los metatags.
+
+ A todos los efectos, es como cerrar un hilo.
+
+ En la implementacion actual, cerrar un metatag impide tambien que se
+ escriban mensajes en los hilos contenidos en dicho metatag. Hay que
+ meditar esta idea, sobre todo pensando que un hilo puede aparecer
+ en varios metatags, algunos de los cuales pueden estar cerrados.
+
+- 20070924: FRONTAL WEB: Cuando se hace un POST y no tenemos permiso,
+ ocurren errores, etc, CPIF no lee el cuerpo del POST y se producira
+ un error cuando el usuario intente realizar otra peticion por el
+ mismo TCP/IP. El error es del tipo:
+
+ Error response
+
+ Error code 400.
+
+ Message: Bad request syntax ('-----------------------------18103908688533555111236688432').
+
+ Error code explanation: 400 = Bad request syntax or unsupported method.
+
Modified: trunk/backend/database.py
==============================================================================
--- trunk/backend/database.py (original)
+++ trunk/backend/database.py Tue Sep 25 00:26:04 2007
@@ -1,7 +1,7 @@
# $Id$
-VERSION_DB="2007091306"
+VERSION_DB="2007092404"
import globales
@@ -74,6 +74,7 @@
conf=PersistentDict()
conf["thread_len"]=10
conf["allow_anonymous"]=True
+ conf["allow_private_messages"]=False
conf["http_max_clients"]=16
conf["http_initial_timeout"]=30
conf["http_keep_alive_timeout"]=5
@@ -355,8 +356,13 @@
clave=str(random.randint(0,sys.maxint))
bt=BTree()
- for i in root["metatags"]["metatags"].iterkeys() :
- bt[i]=BTree()
+ for num_metatag,metatag in root["metatags"]["metatags"].items() :
+ if "public" in metatag :
+ bt[num_metatag]=BTree()
+
+ metatag_privado=metatag_add(conn,"Mensajes privados de "+nick,private=True)
+ bt[metatag_privado]=BTree()
+
usuarios["usuarios"][nick_normalizado]=PersistentDict(
{"ultimo mensaje conocido":root["mensajes"]["num_mensajes"],
"punto de lectura no leidos":bt,
@@ -373,8 +379,11 @@
"cookie":None,
"monitor metatags":BTree(),
"monitor hilos":BTree(),
+ "metatag_privado":metatag_privado,
"nick":nick})
+ toggle_monitor_metatag(conn,nick,metatag_privado)
+
if do_backup_users :
f=open("claves.backup","w")
for i,j in conn.get_root()["usuarios"]["usuarios"].items() :
@@ -399,7 +408,7 @@
else :
return OpenID+"/" in OpenIDs
-def metatag_add(conn,nombre,moderadores=[]) :
+def metatag_add(conn,nombre,moderadores=[],private=False) :
from durus.btree import BTree
from durus.persistent_dict import PersistentDict
@@ -407,19 +416,31 @@
metatags=root["metatags"]
num_mt=metatags["num_metatags"]
metatags["num_metatags"]+=1
- metatags["metatags"][num_mt]=PersistentDict({"nombre":nombre,
- "num_hilos":0,
- "TS2hilo":BTree(),
- "moderadores":moderadores,
- "monitor":BTree(),
- "sticky_threads":set(),
- })
-
- for usuario in root["usuarios"]["usuarios"].itervalues() :
- usuario["punto de lectura no leidos"][num_mt]=BTree()
+ d=PersistentDict({"nombre":nombre,
+ "num_hilos":0,
+ "TS2hilo":BTree(),
+ "moderadores":moderadores,
+ "monitor":BTree(),
+ "sticky_threads":set(),
+ })
+
+ metatags["metatags"][num_mt]=d
+
+ if not private :
+ d["public"]=True
+ for usuario in root["usuarios"]["usuarios"].itervalues() :
+ usuario["punto de lectura no leidos"][num_mt]=BTree()
return num_mt
+def metatag_add_user(conn,metatag,usuario) :
+ root=conn.get_root()
+ usuario=root["usuarios"]["usuarios"][normaliza_nick(usuario)]
+ plnl=usuario["punto de lectura no leidos"]
+ if metatag not in plnl :
+ from durus.btree import BTree
+ plnl[metatag]=BTree()
+
def get_message_source(conn,num_msg) :
root=conn.get_root()
msg=root["mensajes"]["mensajes"].get(num_msg)
@@ -669,8 +690,10 @@
posicion_hilos_no_leidos.clear()
-def user_has_metatag_access(conn,usuario,metatag) :
- return metatag in conn.get_root()["usuarios"]["usuarios"][normaliza_nick(usuario)]["punto de lectura no leidos"]
+def user_has_metatag_access(conn,usuario,metatag,write=False) :
+ usuario=conn.get_root()["usuarios"]["usuarios"][normaliza_nick(usuario)]
+ if write and (metatag==usuario["metatag_privado"]) : return False # De momento no permitimos mensajes privados
+ return metatag in usuario["punto de lectura no leidos"]
def get_metatags(conn,usuario) :
metatags=[]
@@ -693,6 +716,7 @@
u=root["usuarios"]["usuarios"][nick_norm]
if metatag in u["monitor metatags"] :
+ if metatag==u["metatag_privado"] : return None,True
del u["monitor metatags"][metatag]
del root["metatags"]["metatags"][metatag]["monitor"][nick_norm]
return None,False
Modified: trunk/backend/upgrade.py
==============================================================================
--- trunk/backend/upgrade.py (original)
+++ trunk/backend/upgrade.py Tue Sep 25 00:26:04 2007
@@ -345,3 +345,59 @@
del root["usuarios"]["usuarios"]["jcea"]["tz"]
conn.commit()
+ if root["version del foro"]=="2007091306" :
+ print "Actualizando la base de datos: 2007091306 -> 2007092401"
+ root["version del foro"]="2007092401"
+
+ root["config"]["allow_private_messages"]=False
+
+ import database
+ for nick,usuario in root["usuarios"]["usuarios"].items() :
+ metatag_privado=database.metatag_add(conn,"Mensajes privados de "+usuario["nick"],private=True)
+ usuario["metatag_privado"]=metatag_privado
+ database.metatag_add_user(conn,metatag_privado,nick)
+
+ conn.commit()
+
+ if root["version del foro"]=="2007092401" :
+ print "Actualizando la base de datos: 2007092401 -> 2007092402"
+ root["version del foro"]="2007092402"
+
+# Anonymous user has no private messages
+ anonimo=root["usuarios"]["usuarios"][""]
+ del anonimo["punto de lectura no leidos"][anonimo["metatag_privado"]]
+
+ import database
+ for nick,usuario in root["usuarios"]["usuarios"].items() :
+ if not nick : continue # Anonymous user
+ metatag_privado=usuario["metatag_privado"]
+ if metatag_privado not in usuario["monitor metatags"] :
+ database.toggle_monitor_metatag(conn,nick,metatag_privado)
+
+ conn.commit()
+
+ if root["version del foro"]=="2007092402" :
+ print "Actualizando la base de datos: 2007092402 -> 2007092403"
+ root["version del foro"]="2007092403"
+ privados=set()
+ for usuario in root["usuarios"]["usuarios"].values() :
+ privados.add(usuario["metatag_privado"])
+ for num_metatag,metatag in root["metatags"]["metatags"].items() :
+ if num_metatag not in privados :
+ metatag["public"]=True
+ conn.commit()
+
+ if root["version del foro"]=="2007092403" :
+ print "Actualizando la base de datos: 2007092403 -> 2007092404"
+ root["version del foro"]="2007092404"
+
+ import database
+ for nick,usuario in root["usuarios"]["usuarios"].items() :
+ if "metatag_privado" in usuario : continue
+ metatag_privado=database.metatag_add(conn,"Mensajes privados de "+usuario["nick"],private=True)
+ usuario["metatag_privado"]=metatag_privado
+ database.metatag_add_user(conn,metatag_privado,nick)
+ database.toggle_monitor_metatag(conn,nick,metatag_privado)
+
+ conn.commit()
+
Modified: trunk/frontend-web/url_edit_config.py
==============================================================================
--- trunk/frontend-web/url_edit_config.py (original)
+++ trunk/frontend-web/url_edit_config.py Tue Sep 25 00:26:04 2007
@@ -17,6 +17,7 @@
texto=['<tr><td>Number of messages per page on a thread</td><td><input type="text" name="thread_len" size="5" value="%d" /></td></tr>' %globales.thread_len]
texto.append('<tr><td>Allow anonymous access?</td><td><input type="checkbox" name="allow_anonymous" %s /></td></tr>' % ("CHECKED" if globales.allow_anonymous else ""))
+ texto.append('<tr><td>Allow private messaging between users?</td><td><input type="checkbox" name="allow_private_messages" %s /></td></tr>' % ("CHECKED" if globales.allow_private_messages else ""))
texto.append('<tr><td>Simultaneous HTTP connections</td><td><input type="text" name="http_max_clients" size="5" value="%d" /></td></tr>' %globales.http_max_clients)
texto.append('<tr><td>Specify initial HTTP timeout</td><td><input type="text" name="http_initial_timeout" size="5" value="%d" /></td></tr>' %globales.http_initial_timeout)
texto.append('<tr><td>Keep-alive timeout<br/>(if zero or False, no keep-alive support)</td><td><input type="text" name="http_keep_alive_timeout" size="5" value="%d" /></td></tr>' %globales.http_keep_alive_timeout)
Modified: trunk/frontend-web/url_edit_metatags.py
==============================================================================
--- trunk/frontend-web/url_edit_metatags.py (original)
+++ trunk/frontend-web/url_edit_metatags.py Tue Sep 25 00:26:04 2007
@@ -17,12 +17,13 @@
root=conn.get_root()
texto=['<tr><th colspan="2">Cambiar los nombres de los metatags</th><td>Moderadores</td></tr>']
- for i in root["metatags"]["metatags"].items() :
- nombre=i[1]["nombre"]
- moderadores=",".join(i[1]["moderadores"])
+ for num_metatag,metatag in root["metatags"]["metatags"].items() :
+ if "public" not in metatag : continue
+ nombre=metatag["nombre"]
+ moderadores=",".join(metatag["moderadores"])
texto.append('<tr><td>%s</td><td><input type="text" name="metatag%d" size="60" value="" /></td> \
<td><input type="text" name="moderators%d" size="40" value="%s" /></td></tr>'
- % (nombre,i[0],i[0],moderadores))
+ % (nombre,num_metatag,num_metatag,moderadores))
texto.append('<tr><td> </td><td> </td></tr>')
More information about the cpif
mailing list