Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Nov 14, 2013
  1. IMPORTANT PACKAGING CHANGE: /opt/gateone is no more! See the commit m…

    …essage for full detauls...
    In order for Gate One to be more easily packaged across a wider variety of systems (Linux distros, embedded systems, appliances, etc) it was necessary to change how it was packaged.  Previously, all Gate One files were treated as 'data_files' inside of and installed in /opt by default (with the option to install somewhere else using the --prefix).  This prevented Gate One from working properly inside of a virutalenv container which is a very important, modern way of packaging Python modules and applications.  The /opt installation method was also standing in the way of Gate One being included in several Linux distribution repositories.  For these reasons (and a few more) Gate One will now install itself like any other Python module in your site-packages directory.  See below for individual/important notes.
    Changes to defaults:
     * The 'user_dir' option will now default to /var/lib/gateone/users
     * The 'log_file_prefix' will not default to /var/log/gateone
     * The 'settings_dir' will now default to /etc/gateone/conf.d
     * The 'pid_file' will now default to /var/run/ (even though I know this will result in more support requests)
     * The 'keyfile.pem' and 'certificate.pem' will now default to /etc/gateone/ssl/{keyfile.pem,certificate.pem}
    Gate One now requires Tornado version 3.1+.  This is changed from requiring 3.0+.  The reason for this requirement is the use of the new 'group=' keyword argument that is being used with calls to `define()`.
    NEW 'gateone' SCRIPT:  The `setuptools.setup()` 'entry_points' option is now being used to automatically generate a 'gateone' script that will be installed in the default $PATH and can be run from anywhere on the system.  I hope to eventually replace this with a 'gateonectl' script which will provide fine-grained control over the process(es).
    NEW APPLICATION/PLUGIN HOOK:  Applications and plugins can now add CLI options to the 'gateone' command by adding a 'commands' dict (applications) or to the hooks dict (plugins).  This mechanism was added because the logical location for is inside 'applications/terminal' but that's a very inconvenient location for a command-line script (that also happens to be used as a module in the logging plugin).
    NEW "gateone command":  You can now call gateone (or with 'termlog' and it will be equivalent to running '' directly.  Try it:  gateone termlog /path/to/some/.golog # NOTE: Only works if your settings are proper  If an existing /opt/gateone directory is found it will copy your settings directory to /etc/gateone, preserving the existing locations for things like the user_dir, log_file_prefix, and whatnot.
    RENAMES/MOVES: has been renamed/moved to core/ has been moved to core/ has been renamed/moved to core/ has been renamed/moved to async/ has been renamed/moved to auth/ has bee moved to auth/ has been moved to auth/ has been split up and moved to auth/ and auth/ has been moved into the 'applications/terminal' directory.
    Lots of files were placed throughout the 'gateone' directory structure in order to facilitate the new filesystem layout and also allow things like plugins to be importable without having to add them to `sys.path`.  The SESSIONS global has been relocated to 'gateone/' so that it may be more easily shared amongst all applications/plugins.  Fixed a bug with Python 3 where you'd get a MemoryError exception inside `` around line 1770.  This should close issue #331 (#331).  Moved 256colors.json and fallback_bell.txt into the 'static' directory.  Modified to use the new SESSIONS global.  Added an exception check when minifying JavaScript (apparently slimit can have issues in Python 3--I'll see if I can fix them and submit another patch upstream).
    terminal.js:  Added the '✈terminal_pre' class to the '<pre>' element that most stuff inside terminals gets wrapped in.  Related to this, aded that class to `GateOne.Utils.getRowsAndColumns()` inside gateone_utils_extra.js to ensure everything lines up.
    terminal.js:  Added a BIG ASS WARNING in regards to a *very old* Firefox bug that is impacting people's ability to copy & paste.  I tried to work around it many different ways but all failed.  Go vote for this bug:
    terminal.js:  Fixed a number of bugs related to terminal scaling when rows/columns are explicitly set by the user (everything related to `GateOne.Terminal.alignTerminal()`).
    terminal_input.js:  Fixed a transient/harmless exception that could appear in the JS console when you press a key after the last terminal has closed but before `GateOne.Terminal.Input.disableCapture()` gets called (it's really a very short time window but not impossible).  This file has been removed since it is no longer used.  Fixed a bug where you'd get an `UnboundLocalError` exception if something went wrong during Kerberos authentication.
    gateone.js:  Fixed the bug where sometimes you'd get no applications listed in the New Workspace Workspace if the page loaded slow enough.  Fixed a bug in `gen_self_signed_openssl()` where it was always placing the keyfile.pem in the current working directory instead of the path specified via the 'keyfile' setting.  Modified to work in python 2 and 3 without requiring conversion via the 2to3 tool.
    Terminal HTML plugin:  Fixed a bug that was causing exceptions (related to regular expression matching) in Python 3.
    Documentation:  Updated to reflect the new module names/locations of things and rebuilt.
    Init scripts:  Modified to use the new auto-generated 'gateone' script instead of a hard-coded path to
    Bookmarks plugin:  Removed bundled html5lib.  It has been added as a global dependency in
    Terminal themes:  The '✈terminal pre' CSS has been changd to '✈terminal_pre'.
    NEW INIT SCRIPT:  Added an init script for openwrt.  It isn't used by (yet) but I'm sure it will prove useful to some folks (yes, Gate One runs on OpenWRT just fine!).
    Convenience plugin:  Fixed a couple of bugs that got introduced when it was switched over to "use strict".
Commits on Oct 29, 2013
  1. Added `AsyncRunner.running` as a mandatory property that…

    … must be overridden by subclasses.  Modified `AsyncRunner.shutdown()` to use the `running` property instead of an explicit check that looks for the executor.  The executor is now set to `None` inside `AsyncRunner.__init__()` with the expectation that it will be properly assigned in subclasses.  This means we no longer need explicit checks for the presence of the executor attribute.  Renamed `MultiprocessRunner.instance` to `MultiprocessRunner.executor_instance` to better reflect how it is used.  The `MultiprocessRunner` will no longer shut down the executor if there are other instances in use.  Added some useful debug logging here and there.  Added the ability to specify a keytab (path).  Added 'sso_keytab' to the list of authentication options when generating a new 20authentication.conf.  Reduced the default timeout for the `HTML_CACHE` (which is an `AutoExpireDict`) from 5 minutes to 1.  There's really no need to keep lines around in memory that long.
Commits on Aug 31, 2013
  1. YOU CAN NOW CHOOSE YOUR TERMINAL FONT! Also added lots of free fonts …

    …from Google's web fonts directory. If you want to use a font that's installed on your computer just set the terminal font to 'monospace' and change your browser's monospace font to whatever you like. I'll be adding font size control that's independent from Gate One's global font size setting next.
    Added a new Python script:  It will be used by to get metadata from .woff fonts.  It can also be used on the command line to output .woff font metadata ("name table data", specifically) in JSON format.
    app_terminal.js:  Added a new WebSocket action and associated function: "terminal:enumerate_fonts".  it returns a list of fonts installed in the terminal/static/fonts directory (only works with .woff fonts).
    terminal.js:  Added a new user preference:  GateOne.prefs.font.  It will hold the currently-selected font.
    terminal.js:  Added GateOne.Terminal.enumerateFontsAction() and registered it to the "terminal:enumerate_fonts" WebSocket action.
    terminal.js:  Fixed a bug in GateOne.Terminal.enumerateColors() where it was not remembering which text color scheme you last selected.
    terminal.js:  Renamed GateOne.Terminal.enumerateColors() to GateOne.Terminal.enumerateColorsAction() to better reflect what it does (and for consistency: most WebSocket action functions end in 'action').
    terminal.js:  GateOne.Terminal.Input.capture() and GateOne.Terminal.setActive() are now attached to the "go:toggle_panel:out" event.  This should make it so you don't have to click on the terminal after closing a panel to re-activate it.  Note:  Only applies if *not* in embedded mode.  Fixed a bug with the print stylesheet where it wasn't being rendered properly.  Fixed a bug in ApplicationWebSocket.render_and_send_css() where it wasn't passing through the 'media' and 'element_id' keyword arguments to send_css() which would result in all CSS elements being created with the "media" set to "screen" and randomly-assigned element IDs.  Added a shortcut to ApplicationWebSocket.render_style() inside of all GOApplication() classes.  So you can now use self.render_style() instead of  Added a "force" option to ApplicationWebSocket.render_style() as a mechanism to force re-caching of the style at the client.  Added a "mimetype" keyword argument to the create_data_uri() function for those times when you already know the mimetype or want to force it.
    gateone.js:  Fixed a bug in GateOne.Visual.togglePanel() where it was firing "toggle_panel:out" instead of "go:panel_toggle:out" (missing the go:) when toggling all panels out (before toggling a new one in).
    Themes:  Removed the width value from ✈paneltablelabel since it isn't necessary and was making preference panels wider than they needed to be.
    Other:  Updated a bunch of copyright strings to reflect the current year.
Commits on Aug 12, 2013
Commits on Mar 22, 2013
  1. gateone.js: Added some logic to GateOne.Utils.runPostInit() that dete…

    …cts if a given module is an application and registers it accordingly in GateOne.loadedApplications.
    gateone.js:  Renamed the 'NAME' variable that gets attached to all objects created with GateOne.Base.update() to '__name__' to clarify that it is meant to be a special-use variable.
    gateone.js:  Renamed the 'parent' variable to '__parent__' for the same reason as above.
    gateone.js:  Renamed the 'VERSION' variable to '__version__' for the same reason as above (and consistency).
    gateone.js:  Added 'viewBox="0 0 18 18"' to all SVG icons so they will scale-to-fit better in certain situations.
    gateone.js:  Fixed a bug where GateOne.Visual.slideLeft() would sometimes slide up too.
    gateone.js:  Alphabetized GateOne.prefs defaults at the top of the script because I'm a freak like that.
    gateone.js:  Implemented a keepalive mechanism that uses to determine if the connection to the Gate One server has been lost.
    gateone.js:  Added two new preferences:  GateOne.prefs.pingTimeout and GateOne.prefs.keepaliveInterval.  They're both set in milliseconds and control the new keepalive/ping timeout mechanism.  The defaults are 5000 (5 seconds) and 15000 (15 seconds), respectively.  This should resolve issue #217
    gateone.js:  Fixed a bug in GateOne.Utils.isVisible() where it would fail to make a correct determination in certain situations (and sometimes cause an exception).
    gateone.js:  Made some changes to GateOne.Utils.getEmDimensions() in order to make it more reliable in certain situations.
    gateone.js:  Made some changes to GateOne.Utils.getRowsAndColumns() in order to make it work on elements that are not (currently) visible.
    gateone.js:  Fixed a bug in where it was referencing an undefined variable (self) causing an exception (most commonly happened in conjunction with once()).
    terminal.js:  newTerminal() now passes a 'termUndefined' variable when triggering the 'terminal:new_terminal' event so functions attached to that event can tell if this terminal is new or was merely re-created from an existing session (e.g. user reloads the page or reconnects).  e.g. trigger("terminal:new_terminal", term, termUndefined).
    Themes:  Just a few tweaks here and there to the new prefs panel stuff.
    SSH Plugin:  Fixed the bug where autoConnectURL was not working.  This should close issue #226.
Commits on Mar 8, 2013
  1. Fixed a bug where you'd get a KeyError exception if the '…

    …enable_unix_socket' setting was missing. It is no longer mandatory.  Improved error handling/logging when there's a Kerberos-specific problem.
    Bookmarks plugin:  Fixed a bug where 't' was undefined. (and others):  Moved into its own separate module.  Apps and plugins had to have their imports corrected to reflect this.
Commits on Mar 2, 2013
  1. Fixed a bug where some terminal app plugins couldn't impo…

    …rt the terminal module when running Gate One out of the download/git directory.  Fixed a bug where an exception would be thrown trying to read a 'theme.css' file that does not exist (in a first-run situation or if the user cleared their gateone_cache directory).  Fixed a bug in ApplicationWebSocket.broadcast_file_update() where it was using 'notice' instead of 'go:notice'.  Fixed a bug in ApplicationWebSocket.file_checker() where it wasn't resetting the 'watched_files' modification time after calling a registered file watching function.  Fixed a bug where a number of functions were not using the correct 'session_dir' variable (they were using the 10server.conf and ignoring what was given on the command line).  Fixed a bug where Applications' init() functions were not being passed 'settings' that had been overridden on the command line.  Fixed a bug where you'd get an exception while converting old-style server.conf API keys to the new 20api_keys.conf file format.  Added some additional debugging information to ApplicationWebSocket.file_checker() when an exception is encountered.
Commits on Mar 1, 2013
  1. gateone.js: Fixed a bug where GateOne.User stuff wasn't working due t…

    …o the 'prefix' variable being set incorrectly.  Fixed a bug where themes were not being synchronized with the client properly (it was using the modification time of the wrong file).  You can run Gate One out of the git clone directory again.  Installing via is not necessary.  This should close issue #214 (#214).  Changed the way 'gateone' settings are detected so as to avoid accidentally overwriting a 10server.conf that may simply have a syntax error (related to issue #213).  Fixed a bug where if you had a syntax error in your 50terminal.conf it would overwrite the file.  This should close issue #213 (#213).
    Themes:  Just a few tweaks here and there to make stuff look better.
Commits on Aug 18, 2012
  1. A few minor changes here and there to make the code more rob…

    …ust.  Ditto.  Ditto.
    go_process.js:  Before loading lines on the screen the Web Worker will now strip trailing whitespace.  This should make copying & pasting easier when dealing with multiple lines.
    hello_embedded:  All calls to GateOne.init() inside the tutorial now automatically set GateOne.Logging.level to 'DEBUG'.
Commits on Mar 1, 2012
  1. Playback Plugin: Changed the default number of frames to keep in memo…

    …ry from 200 to 75 to cut down on memory utilization. Also, having this kept low seems to stave off Chrome's memory leak for much, much longer than it usually takes to kick in.
    gateone.js:  Minor change to GateOne.Input.capture() and GateOne.Input.disableCapture() to prevent a transient JavaScript exception that can occur in rare situations.
    gateone.js:  GateOne.Input.onKeyDown() now makes sure that the Gate One container div doesn't have its opacity set to 0 before it handles a key event.
    gateone.js:  Added a check to playBell() to make sure we actually have a #bell element before we try to play it (prevents transient exception).  Minor docstring update.  Fixed the --config option so it actually works (huzzah for the test plan that caught this!).  Set a maximum for rows/cols to prevent a memory DoS situation that can occur when a client sends huge values for these items.  Minor docstring update.  Minor docstring update.  Minor docstring update.
    Documentation:  Lots of updates (new screenshots, details, etc etc).
    Themes:  The #{container} now has some basic CSS3 transform properties applied to it (in case anyone ever decides to transform it).
    Themes:  The noticecontainer now has a z-index of 9999 so that it is more likely to show up above other elements on the page (since it lives outside of goDiv).
Commits on Nov 17, 2011
  1. Removed the _() function wrapper around the ImportError catch in gate…

    … surrounding the Tornado imports. If we get an error importing tornado we won't have the _() function available so there's no point in wrapping it. I guess this one error message won't support internationalization--not much I can do about it.
    Removed some unused imports in a few places to (hopefully) save some memory.  Also removed some unused variables found by pylint.
    Added to  Apparently it has been missing this whole time!
    Moved __reduce_renditions() outside of terminal.Terminal since there's nothing referencing 'self' inside of it (and having the function in the global scope makes it slightly faster).
    Fixed a bug where you couldn't click on a terminal to switch to it when in grid view.
    Made it so that the playback controls are hidden when in grid view.
Commits on Nov 15, 2011
  1. Removed the extra check for an ImportError inside of since thi…

    …s is already accounted for inside of
Commits on Nov 8, 2011
  1. Added several helpful error messages in the event that a dependency c…

    …annot be found.
    Made it so that multiprocessing gets disabled if you're running Gate One using Python 2.6.  Apparently the version of functools.partial in 2.6 isn't pickleable but in 2.7 it is.  Without that capability I don't know if it would be possible to support multiprocessing in Gate One (any ideas?).  For reference, the new rate limiter/autokill logic doesn't work as well without multiprocessing.
    Fixed the bug where newlines weren't working properly (removed the tilda in front of termios.ONLCR in
    The rate limiter/autokill logic has been improved considerably.  No longer will a runaway process force you to restart Gate One (well, it shouldn't anyway if you're running Python 2.7+).  It takes a little while to kick in but it seems to work pretty good for killing things like "yes" and "while true; do echo foo; done".  I'll make it more sophisticated with fallbacks to killing a PID in the future.
    Reverted my changes to --address.  Apparently they weren't necessary.
Commits on Oct 18, 2011
  1. Some code cleanup... Found some leftovers, extraneous whitespace, etc…

    …. More is likely on the way as well.
Commits on Oct 13, 2011
Something went wrong with that request. Please try again.