- Entries : Category [ COREBlog ]
18 April
2005
Archivesサイドボックスに去年へのリンクを
ちょっといじらせてもらいました
COREBlog.pyのなかdef month_rchive_itemsからなる行を
def month_archive_items(self,count=1,start_year=0,start_month=0,start_day=0)
に、
else:ブロックを
year = start_year
month = start_month
などとさせてもらいました。
その上でmodules/archivesを
<dtml-unless archives_item_count>
<dtml-call "REQUEST.set('archives_item_count',12)">
</dtml-unless>
<dtml-unless archives_year>
<dtml-call "REQUEST.set('archives_year',ZopeTime().year()+1)">
</dtml-unless>
<div class="sideboxtitle"><dtml-if "_.len(document_title)>0"><dtml-var document_title><dtml-else>Archives</dtml-if></div>
<div class="sidebody">
<dtml-in "month_archive_items(count=archives_item_count,start_year=_.int(archives_year)+1,start_month=-1,start_day=1)" mapping>
<a href="<dtml-var blogurl>/monthlist_html?year=<dtml-var year>&month=<dtml-var month>"><dtml-var "getMonthName(month)"> <dtml-var year></a><br>
</dtml-in>
<br>
@<a href="<dtml-var blogurl>?start_year=<dtml-var "_.int(archives_year)-1">"><dtml-var "_.int(archives_year)-2"></a>
なぞなぞしましたのが右のサイドボックスArchives欄です。これで追っていくと何年から書き出していた(こんなこともすでに忘れてました)とか思い出せます。
めでたしめでたし。
#あれ?まてよエントリの無い月があると変なことになるかな?...あ、きっとエントリの無い月分だけその前の年が表示されちゃいますね。ま、ご愛嬌。多分に自分のためだし、、、、。
?ではじまるcgi形式も、、、そうね。ま、いいっか。
06 May
2005
Entry時にデフォルトカテゴリをselectedにする
ある日のML
http://mail.webcore.co.jp/pipermail/coreblog/2005-May/001103.html
何が変わったというとmanage_addEntryForm.dtmlに<option value="-1">----</option>の一行が追加されたこと。
僕もDefault Categoryを一番最初に作っていたCategoryにしていたので今までEntryの時にデフォルトカテゴリのセッティング値が反映されているのだと思い込んでいた。
で、Ver1.2にアップグレードしたのでまたいじらせてもらいました。
前述manage_addEntryForm.dtmlの100行目あたり<dtml-in category_list>の次行を
<option value="<dtml-var id>"<dtml-if main_category><dtml-if "_.str(id)==_.str(main_category)">selected</dtml-if><dtml-else><dtml-if "_.str(id)==_.str(blog_client_default_category)">selected</dtml-if>
</dtml-if>><dtml-var name></option>
んな風に。
一応望んだ通り動いているみたい。
MLで柴田さんが返答しているように本来は「Blogクライアント用の設定」のblog_client_default_categoryの値をZMIからのエントリにも無理やり適用してしまった。すみません。動作保障外ですね。
#なのにエントリしたのはいじったことを書き留めていかないと次のバージョンアップのとき何をしたのかすっかり忘れてしまうから。
今回のバージョンアップでも自分のblogを読み返して過去の設定し直したりして。30過ぎると急に物忘れが激しくなりますよ>20代のそこのあなた(誰に言ってるのだろう?)
一週間前にやったことすら思い出せない私です。
Posted by
shinobu at
02:05
|
Trackbacks (0)
08 September
2005
SideBoxにSentTrackbacksモジュールを追加
気になって眠れない
例のMLのお題。
SideBoxにモジュールとしてRecent Trackbacksを追加する
http://mail.webcore.co.jp/mailman/private/coreblog/2005-September/001163.html
結構真剣にやってみました。
で、私の答えは間違ってるとは思うけど、答えあわせがちょっと楽しみです。
atsさんの口ぶりだとdtmlだけで実装できるようだ。
私は"sending_trackback_list"関数はEntryの中にあるのでその上位からは呼び出せない、と思っている。
<dtml-with entry_body>
:
とかすると呼び出せはするけどentryに必要な各種プロパティを全部用意していかなければならないので無駄が多いと思う。
思いついたのは二つ。
一つはPythonメソッドで各エントリごとのsendingtrackbacks(IOBTreeでの実装)をとりだしてリストに集める方法。これは動的になるのでサーバに負荷がかかりそう。
もう一つはCOREBlog.pyに"rev_comment_items"とか"rev_entry_items"というSideBoxのRecent Entryモジュールで呼び出している関数があるのでそれを真似て"rev_sendingtrackbacks_items"という関数を作ってやる。今回は勉強を兼ねてこちらで作ってみた。
こっちの欠点は過去の送ったtrackbackが反映されないこと。
方針を決めてはじめるとIOBTree、IISetの使い方がよくわからない。手間取りました。
結局よくわからずじまいでCOREBlog流儀に従わず単純なリストに放り込むことにしてしまった。
また、__init__内にグローバルなリストを作っていたつもりだったのだけどこれもどうも、COREBlogサイトを作成したときだけに呼び出されるようで(ちがうかな?)テストなリストをたくさん作ってしまい放置状態。
この辺、Zopeがどうやってデータを保持しているのかよく解かっていないからどうにもならないのね、と反省。
デヴキャン行きたいなー。
でも、だいぶCOREBlogのなかに潜っていました(理解できたかはまた別問題)。
31 January
2006
Charge Back攻撃を受けたんで
むかー、、、と言ってるだけでなく
かならずバックアップとってからやってください!!
私の下手なスクリプトであなたの大事なBlogのコメントが失われても責任もてません!!
スパム防止はみなさんたくさん方法を書いてありますのでわたしはコメントスパムを受けた後の事後処理として。もしくは機能拡張せずそのままAnonymousさんに投稿できるようにしといて、手動でSPAMを消す方針をとりたい場合。
all_commentsなんてdtmlメソッドを作る(名前は任意)
<form action="delcomm" method="post">
<input type="submit" value="Delete"><br>
<dtml-in "rev_comment_items()">
Comment ID<dtml-var id>:
<input type="checkbox" name="ids:list" value="<dtml-var parent_id> <dtml-var id>">
Author:<strong><dtml-var author></strong> Title:<dtml-var title>(Entry ID:<dtml-var parent_id>)
<br>
</dtml-in>
<input type="submit" value="Delete">
</form>
で、delcommなんていうpythonスクリプトをつくる
#Parameter Listにはidsをセットします
for tmp in ids:
tmp = tmp.split()
ent = container.get_entry(tmp[0])
ent.deleteComment(int(tmp[1]))
print "Deleted comment No.",tmp[0],".",tmp[1]
return printed
んで、all_commentsをビューして消したいコメントにチェックをつけdeleteボタンを押してくださいませ。
#追伸 今回の被害がどの程度か検索してたら、清水川さんのところでこんなの発見しました
COREBlog1.2.1のコメント管理
http://www.freia.jp/taka/file/Zope/COREBlogModerates-0.1.tgz/file_view
うげ、これがあれば酔っ払いながら夜中の3時までPC睨む必要なかっ、、、、。
02 February
2006
Spam対策、よーーく考えると
http://coreblog.org/jp/misc/spam-spam-spam
でCAPTCHA認証に投票したのですが、今回の攻撃はaddCommentメソッドに直接アクセスしているものでした。
で、わたしはCAPTCHA認証がよさげだ、と思っていたのですが、結局ソースをいじりこんな対策をしてみました。
Entry.py内のaddComment冒頭3行を書き換えました。
def addComment(self,title,author,body,passwd,moderated= 1,email="",url="", \
created="",REQUEST=None):
time = str(DateTime())[:18]
if (self.allow_comment != comment_open) or (time != passwd):
#This entry does not allow adding comment
raise RuntimeError,"This entry is closed for adding comment."
addCommentProxyはこんな感じ
REQUEST = container.REQUEST
passwd = str(DateTime())[:18]
return context.addComment(title,author,body,passwd,email=email,url=url,REQUEST=REQUEST)
comment_formもsubmitボタンを以下のように書き換え
<input type="submit" name="methods/addCommentProxy:method" value=" POST " />
CAPTCHAのかわりにパスワードをサーバ時間にしてみました。
これだとaddCommentに直接アクセスするにもサーバ時間を10秒単位で追わなければならないのでかなり攻撃者には面倒なことになりのでは?と考えました。あさはかでしたらご指摘ください。ぜひともお願いします。
もちろんCAPTCHA認証も組み合わせてより堅固にするのが最良でしょう。
今回COREBlogユーザがそれぞれのスパム対策をしたことにより、攻撃者に対して一様なやり方ではコメントを投稿できないと知らしめたことになり、非常に有意義であったのでは、と思います。多様性が種を強力なものにするという一例でしょうか。
30 May
2006
Moblogからの投稿を
自動でリンクつきにしたいからhttp://で始まる行があったらこんなふうにしちゃえ、moblog処理のあたりで
for line in lines:
line = replace(line,"\n","")
line = replace(line,"\r","")
if line and ord(line[0]) == 32:
#remove first space
line = line[1:]
の後ろに
if line[:7]=='http://':
line = '<a href="' + line + '">' + line + '</a>'
みたいなのをいれちゃう。
URLのあとにつづけて文字を打たれちゃうと失敗になってしまうけど、大抵のメーラも大体一行にURLを入れる処理で考えているようだから(じゃないと、なにでURLの終わりとするのか難しい)こんな程度の処理でいいかな、って。
もっといい考えないかな。