概要
GitBucket用のプラグイン GitBucket Markdown Enhanced Pluginを開発しています。
GitBucket Markdown Enhanced Plugin は、GitBucket 標準のマークダウンレンダリングエンジンを置き換えるプラグインです。
目標は、Visual Studio Code の Markdown Preview Enhanced 向けの markdown ファイルを軽易に Web で共有できる環境です。
これまで相対リンクによる画像の埋め込みやリンクの処理がイマイチだったのですが、全般的に見直しました。(ただし、ディレクトリへのリンクが解決出来ていません…)
前回の記事
リンクを解決する MarkdownEnhancedLinkResolver の修正履歴
かなり迷走しています。
AI がそれっぽいコードをサジェストしてきたのを検証なく入れてた
fix link on preview and image url · yasumichi/gitbucket-markdown-enhanced@5e80992
上記コミットには、一部、AI によりサジェストされたコードが入っています。なんとなくそれっぽく見えたのであまり修正せず、コミットしてしまいました。
全般的な見直しを行ったコミット
Overall review of relative URL handling · yasumichi/gitbucket-markdown-enhanced@d5198b1
AI によるコードを排除し、java.net.URI クラスの resolve メソッドで相対リンクを解決するように修正しました。
ユーザーは想定しないパスを入力するもの
java.net.URI クラスを導入したことで java.net.URI が正しいと認識しないパスが入力されると例外が発生してしまいます。
職場であったのは、Windows の共有フォルダのパスをリンク記法で埋め込むというものでした。さらに、円マーク(バックスラッシュ)がエスケープシーケンスで食われてしまうことを嫌って [アンカー]("共有フォルダのパス") のようにダブルクォーテーションで囲まれていました。
ちゃんと例外処理しないとダメですね…
バックスラッシュがあったら、相対リンクとして処理しないように修正
Changed to ignore URLs that start with a backslash · yasumichi/gitbucket-markdown-enhanced@803b42c
例外処理を行ったコミット
Handled java.net.URI exceptions. · yasumichi/gitbucket-markdown-enhanced@65677bb
まだまだ問題はありそう
- 相対リンクでファイルではなくディレクトリを指定されると 404 Not Found なリンクになる
- セキュリティ的な考慮は足りない
- Java の標準 URI ライブラリが RFC 3986 に対応していないので、自作ライブラリで対応する羽目になった話 #Web - Qiita みたいな話もあるので将来的には実装変更が必要かも
最近、新たな GitBucket プラグインである GitBucket Flexible Gantt Plugin を開発して、GitBucket のコアサービスから、情報を取得する方法を覚えたのでフィードバックできればと考えています。