Building a Demo GUI Front End for DNSDB API in Scala with Swing For

Building a Demo GUI Front End for DNSDB API in Scala with Swing For

Preface This white paper will explain how to use Scala with Swing to create a demonstration GUI interface to Farsight's passive DNS database, DNSDB API. Before getting into the meat of that, let's go over some prefatory information. Intended Audience This white paper is meant for users comfortable with detailed technical content. Experience with some sort of programming or scripting language will be helpful, and help you to get more out of this document. Substantively, the functionality described in this white paper may also be of particular interest to certain DNSDB users, including users who work in a pure Microsoft Windows PC environment. Organization of This White Paper This is a relatively long white paper. If you review the table of contents, that will allow you to see how this paper is organized, and what we'll cover. In looking at table of contents, don't let the number of "chunks" deter you -- some "chunks" may consist of just a paragraph or two of text. There are also lots of images and other figures. Another thing we've done to try to reduce the paper's complexity a bit is to divide it into three main sections plus five appendicies: 1) The first section consists of some introductory narrative/discussion (which you can skip if you're impatient, although reading this material will help you to understand "where we're coming from" and why we did some of the things we did) 2) A second section, showing you how to actually build the demo GUI front end code for use on a local Mac, and 3) A third section, focusing on packaging and porting the code for use on third party systems, including both 3rd-party Macs and 3rd-party Microsoft Windows PCs (such as systems running Windows 10 or Windows 7). The appendicies contain copies of our actual code. 3 Table of Contents Preface ......................................................................................................................................................... 2 Table of Contents ......................................................................................................................................... 3 Section 1. Discussion/Narative I. Introduction ...................................................................................................................... 4 II. Why Scala .......................................................................................................................... 4 III. Scala Documentation ........................................................................................................ 5 IV. Our Overall Plan For Today's Example .............................................................................. 6 V. Integrated Development Environment? ........................................................................... 7 VI. Graphical User Interface Selection .................................................................................... 8 VII. GUI Layout Managers ........................................................................................................ 8 VIII. RESTFUL API Call Format ................................................................................................. 11 IX. Cryptographic Scaffolding ............................................................................................... 12 X. Creating build.sbt sbt Config Files ................................................................................... 13 Section 2. Actually Building/Installing Code On The Local Machine XI. Getting Started With Scala On The Mac: Prerequisites .................................................. 16 XII. Installing Scala and sbt .................................................................................................... 16 XIII. Creating The Directory Structure We Need .................................................................... 17 XIV. SampleScala/build.sbt ..................................................................................................... 18 XV. SampleScala/project/assembly.sbt ................................................................................. 18 XVI. SampleScala/project/plugins.sbt .................................................................................... 19 XVII. Our Actual Scala Source Code ......................................................................................... 19 XVIII. Creating Your DNSDB API Key File ................................................................................... 19 XIX. The JCE Unlimited Strength Jurisdiction Policy Files ....................................................... 21 XX. Building The Scala Code .................................................................................................. 25 XXI. Running A Query and Looking At The Results ................................................................. 26 XXII. Quitting ........................................................................................................................... 28 XXIII. Packaging Our Code For Routine Local Use Without sbt ................................................ 29 Section 3. Packaging For Use on 3rd-Party Macs and Windows PCs XXIV. Creating A dmg Package For Use on A 3rd-Party Mac .................................................... 30 XXV. Running Our dmg On A 3rd-Party Mac ........................................................................... 31 XXVI. Making A Microsoft Windows Installer ........................................................................... 32 XXVII. Using The MS Windows Installer On A 3rd-Party System ............................................... 35 Section 4. Conclusion XXVIII. Miscellaneous Notes ....................................................................................................... 42 XXIX. What Didn't We Do? ....................................................................................................... 44 XXX. Conclusion ....................................................................................................................... 45 XXXI. Acknowledgments ........................................................................................................... 45 Appendicies Appendix I. SampleScala/build.sbt file ............................................................................................... 46 Appendix II. SampleScala/src/main/scala/SampleScala.scala ............................................................. 47 Appendix III. SampleScala/project/assembly.sbt ................................................................................. 63 Appendix IV. SampleScala/project/plugins.sbt .................................................................................... 63 Appendix V. Licenses ........................................................................................................................... 64 Appendix VI. check.java source file ...................................................................................................... 65 4 SECTION 1. Discussion/Narrative I. Introduction Many of Farsight's DNSDB customers access DNSDB via either: • Our command line interface API demo programs dnsdb_query.py1, and/or its C language analog, dnsdb_query,2 or via • Our point-and-click web interface3 However, because DNSDB uses a RESTful API, there's no reason why you shouldn't be able to access DNSDB from virtually any programming language. For any "old school"/traditional coders out there, we've previously demonstrated how to query DNSDB using libcurl from gcc, see "Making Programmatic DNSDB Queries With libcurl."4 This document describes building a GUI interface to DNSDB using Scala on the Mac. We'll also package our program so we can move it over and run it on other Macs, and on common versions of Microsoft Windows (such as Microsoft Windows 7 or Microsoft Windows 10). II. Why Scala? You may wonder, why use Scala rather than directly use the world's 2nd-most-popular programming language, Java?5 Answer: Scala fixes many of the frustrations that have historically bedeviled Java, while still giving coders the ability to use Java's capabilities when doing so is convenient (or inescapable). To make that concrete, see (the somewhat tongue-in-cheek) "How Scala compares with 20 other programming languages according to Reddit analysis:"6 [...] Scala appears to be the only production-proven programming language to make engineers happy and alleviate their need to curse [relative to] more broadly-adopted languages like Java, PHP and JavaScript. That analysis, while couched a bit wryly, is based in truth. Scala is "fun to code in" in a way that Java and other more-pedantic/strictly-object-oriented languages tend not to be. Less cussing and more happiness results. 1 https://github.com/dnsdb/dnsdb-query 2 https://github.com/dnsdb/dnsdb_c/ 3 https://www.dnsdb.info/ 4 https://www.farsightsecurity.com/2016/11/04/stsauver-dnsdb-libcurl/ 5 http://spectrum.ieee.org/computing/software/the-2016-top-programming-languages 6 https://www.lightbend.com/blog/how-scala-compares-20-programming-languages-reddit-analysis 5 Scala also naturally supports a functional programming model. Quoting Alvin Alexander's online functional programming book:7 As at least one functional developer has said, when you ‚ "Think in FP," you see an application as (a) data flowing into the application, (b) being transformed by a series of transformer functions, and (c) producing an output. The first lessons in this book are aimed at helping you to "Think in FP‚" to see your applications in this way, as a series

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    65 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us