[Cl-perec-devel] Lots of questions :-)

Attila Lendvai attila.lendvai at gmail.com
Mon Sep 14 10:40:08 UTC 2009


> (cl-perec:defptype password ()
>  '(text 128))
>
> (cl-perec::defmapping password (cl-rdbms::sql-character-varying-type :size 128)
>  'cl-perec:identity-reader             ; unexported
>  'password-writer)
>
> (defun password-writer (val rdbms-values index)
>  (setf (elt rdbms-values index)
>        (ironclad:byte-array-to-hex-string
>         (ironclad:digest-sequence :sha1 (babel:string-to-octets val)))))


i'm not sure you want to do this, though... this will apply the hash
algorithm every time the slot is *written* to the db.

what you want is a setf customization on the password slot that gets
triggered every time the slot is *set*. but it requires a custom
metaclass, etc... imho, not really worth it.

i suggest to use a simple (defun update-password ...) custom function instead.

*if* your password was stored with a reversible encrypting, then this
solution could work if you also decrypt the slot value in the reader
function of the type.

btw, we have our relevant code here:

http://common-lisp.net/cgi-bin/darcsweb/darcsweb.cgi/darcsweb.cgi?r=cl-dwim-cl-dwim;a=headblob;f=/model/authentication.lisp


> (pushnew 'password cl-perec::*mapped-type-precedence-list*)


read the docs on the above variable. you need to append your type at
the end, not the beginning...

hth,

-- 
 attila




More information about the cl-perec-devel mailing list