How to applying IntelliJ theme in ZAP

어제 BurpSuite의 Customizer에 대한 글을 썼었습니다. BurpSuite에서 FlatLaf의 IntelliJ Theme를 사용할 수 있도록 지원해주는 확장 기능이였고, 글 말미와 댓글에도 작성했듯이 ZAP 또한 2.10 버전부터 FlatLaf를 사용하고 있기 때문에 구현이 가능할거란 생각이 들었었습니다.

개인적으로 Java를 좋아하진 않지만 간단하게 테스트해보니 잘 되어서 Simon과 이야기를 나누었는데, 결과적으론 ZAP Core보단 AddOn쪽으로 방향을 잡는 것 같아 일단 PR은 던지지 않은 상태입니다. 시간이 지나면 까먹을 수도 있기 때문에 간단히 정리해서 글로 작성해둡니다.

FlatLaf IntelliJ Themes Pack

FlatLaf는 IntelliJ Themes Pack을 지원하고 있습니다.

이는 FlatLaf를 기반으로 한 앱은 다양한 테마를 기본적으로 가져다 쓸 수 있다는 것을 의미합니다. Atom 부터 Github, Monocai 등등 색감 자체가 괜찮은 테마들을 많이 지원하고 있어서, Java App에서 조금 더 쉽게 컬러링을 할 수 있는 좋은 라이브러리입니다. 각 Class명으로 테마를 지정하며 테마별 Class는 아래 링크에서 확인할 수 있습니다.

https://github.com/JFormDesigner/FlatLaf/tree/master/flatlaf-intellij-themes

  • com.formdev.flatlaf.intellijthemes.FlatArcIJTheme
  • com.formdev.flatlaf.intellijthemes.FlatArcOrangeIJTheme
  • com.formdev.flatlaf.intellijthemes.FlatArcDarkIJTheme
  • …snip…

Add gradle implementation

implementation("com.formdev:flatlaf-intellij-themes:0.45")

Add class in code

gradle에서 flatlaf-intellij-themes 가져왔기 때문에 코드단에서 아까 리스트에서 봤던 Class들을 사용할 수 있습니다. ZAP쪽에서 기존에 사용하던 Interface가 있어서 추가만 해주었습니다.

public void initView(ViewDelegate view) {
  Arrays.asList(
    new LookAndFeelInfo("Flat Light", "com.formdev.flatlaf.FlatLightLaf"),
    new LookAndFeelInfo("Flat Dark", "com.formdev.flatlaf.FlatDarkLaf"),
    new LookAndFeelInfo("Flat IntelliJ", "com.formdev.flatlaf.FlatIntelliJLaf"),
    new LookAndFeelInfo("Flat Darcula", "com.formdev.flatlaf.FlatDarculaLaf"),
    new LookAndFeelInfo("Material Arc Dark","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkIJTheme"),
    new LookAndFeelInfo("Material Atom One Dark","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkIJTheme"),
    new LookAndFeelInfo("Material Atom One Light","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightIJTheme"),
    new LookAndFeelInfo("Material Dracula","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaIJTheme"),
    new LookAndFeelInfo("Material Github","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubIJTheme"),
    new LookAndFeelInfo("Material Light Owl","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlIJTheme"),
    // ... snip ...
    new LookAndFeelInfo("Material Solarized Light","com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightIJTheme")
    )
  .forEach(UIManager::installLookAndFeel);
}

저에겐 특이사항은 없었는데 환경에 따라서 문제가 있을 수 있나봅니다. 아래 링크 참고해주세요!

https://github.com/hahwul/assets.hahwul.com/issues/46#issuecomment-894730895

new LookAndFeelInfo("FlatLaf Light", "com.formdev.flatlaf.FlatLightLaf")

Build and test running

build

./gradlew build

zap쪽에서 현재 소스코드로 앱을 실행할 수 있도록 :zap:run 으로 만들어뒀습니다.

./gradlew :zap:run

아무튼 실행해서 해보니 잘 동작하네요 😎


Commit

https://github.com/hahwul/zaproxy/commit/d96daba3b12a0d9c5708b272ea6655a53ce32cff