Skip to content
Commits on Sep 24, 2012
  1. Fixed a bug where the wrong init script was being installed…

    … on Red Hat and Gentoo systems.
    INSTALL.txt:  Added instructions on how to make Gate One start at boot on Debian/Ubuntu, Red Hat/CentOS, and Gentoo.
    gateone.js:  Fixed a bug where if you clicked on a toolbar icon more than once while a panel was still being drawn/hidden it could get stuck in a state where it would hide the panel every time you tried to toggle it open.
    SSH Plugin:  Fixed a bug in ssh.js where execRemoteCmd() wasn't calling errorback functions when the WebSocket was disconnected.
    SSH Plugin:  When opening a sub-channel fails, execute_command() will now attempt to send a message to the client indicating as such (as opposed to just silently failing).
    SSH Plugin:  Added a little check to open_sub_channel() to ensure that the user's session directory exists before it tries to look inside it for an existing control socket.  This situation could happen if you restarted Gate One and a client tried to execRemoteCmd() before they had completed the authentication process (which creates their session dir).
Commits on Sep 22, 2012
  1. Added a whole bunch of init scripts to properly daemonize Gate One on…

    … each of the following platforms: Debian/Ubuntu, Gentoo, and Red Hat/CentOS. These should be automatically installed when you run 'python install' and automatically included with the appropriate paths when you create .deb or .rpm packages.
    Added an INSTALL.txt
    Removed MANIFEST and created a  It's better this way.
    Setup configuration:  Removed the tornado dependency from the setup scripts since these dependencies wind up in the .rpm and .deb packages but it is recommended that users install tornado using pip.  If the user forgets Gate One will display a helpful message about this in the logs and refuse to start.
    Documentation:  Rebuilt the docs and added a few things to the release notes.
Commits on Sep 5, 2012
  1. All-around: Fixed a few bugs associated with Python 3 support. Partic…

    …ularly in relation to logs and the log viewer. The flat log view still isn't working for some reason (some sort of gzip problem) but if experience tells me anything it is that no one cares about the flat log view :). Python 3 support for the flat log view might have to wait.  Added some logic to detect if html5lib is already installed when using Python 3 and to skip the 2to3 conversion process if it is (it actually removes it from /opt/gateone/plugins/bookmarks/dependencies).  This should save a lot of time when installing Gate One with Python 3 (html5lib takes forever to convert; seriously annoying while debugging).  Fixed a bug with fix_shebang() where it was adding an extra '3' to 'python3' every time it ran on the same file.
    Note: Removed the file from the documentation since it isn't being used.
    Logging Plugin:  Instead of keeping two identical copies of several log-related functions I've switched to just import those functions from termio.
    gateone.js:  Minor fix for users that need to re-authenticate when using PAM authentication.  The "OK" dialog that pops up asking them to reauthenticate when the cookie secret is changed will now choose a random username in the window.location.href just like logout() does.
Commits on Apr 27, 2012

    All throughout the code things have been updated here and there in order to support Python 3.  A few things might be a little rough around the edges and it *does* take a long time for the 2to3 tool to work its magic when you run "python3 install" but by golly it *works*!  Not only does it work but it is FAST.  Preliminary benchmarks show Gate One using markdely less memory and CPU running under Python 3.2 (I can't wait to try 3.3!) than it does with Python 2.7.  I'll be tweaking things here and there in the next few commits (related to Python 3 support) and I wouldn't be surprised if I can make it perform even better.  Support for Python 3 "just works".  Though it does take a lot longer to install if you run "python3 install" (since the whole /opt/gateone dir must be walked converting everything to work with Python 3).  Updated the version string to 1.1.  Updated the version string to 1.1.  Modified human_readable_bytes() to use "nbytes" as the argument instead of "bytes" to avoid the use of a python built-in.  Using Tornado's utf8() and to_unicode() functions in a few places to make it easier to support both python2.6+ and python3+ simultaneously.
    Bookmarks Plugin:  The use of html5lib has been changed to be a dynamic import (where it's used).  I'm going to see if I can figure out a way to get importing/exporting bookmarks working without this module to make "python3 install" go faster (most of the time is spent converting html5lib!).
    SSH Plugin:  The get_identities() function now double-checks that identities exist before it returns them as a list.  This means you won't see them when prints that "The following identities will be used..." message (which is good and logical).  The next time the user marks an identity as default the .default_ids file will get cleaned up automatically.
Commits on Mar 3, 2012
  1. Made a few minor changes to, setup.cfg, and added a…

    …g to make it easier to make .deb packages.
Commits on Mar 2, 2012
  1. Fixed the (wasn't installing the subdirectories properly as …

    …a result of my last commit).
  2. Fixed a bug where you couldn't run from outside of the GateO…

    …ne directory. You can now run 'sudo python /absolute/path/to/GateOne/ install' to install Gate One.
Commits on Feb 9, 2012
  1. DOH: Added the logging and ssh plugin templates to the git repo. NO W…

    …ONDER people were saying some things just don't look right. LOL!  Fixed all the authentication redirects so they works with the new url_prefix option.  Fixed the login_url (Tornado setting) so it now uses the url_prefix option.  Fixed the HTTPSRedirectHandler so it also takes the url_prefix into account.  I also changed its URL pattern regex to be ".*" (meaning, 'match anything') from just "/" (meaning, 'match *just* http://whatever/').  That way a user can hit your Gate One server's hostname/IP via HTTP in a browser with *any* URL and get magically redirected to HTTPS on the proper port.  Removed that leftover print statement from the new ErrorHandler.
    SSH Plugin:  Added support for telnet:// URLs to  This should resolve #87
    Bookmarks Plugin:  Added support for telnet:// URLs as well.
    Bookmarks Plugin:  Added a new type of tag that gets automatically added to bookmarks:  URL type.  Essentially this will let you filter the bookmarks list based on the type of URL in the bookmark.  This was necessary in order to be able to easily differentiate between ssh:// and telnet:// URLs.
    Bookmarks Plugin:  Added a new "Autotags" section to the tag cloud area where you can filter based on URL type (protocol) and the age of bookmarks (e.g. "<7 Days").  Made a minor change to ensure that when it is run that the combined_plugins.js gets automatically overwritten.
    Playback Plugin:  Changed playback.js a bit in an attempt to save some memory but I believe what I'm experiencing is a bug in Chrome...  Everything stays nice and low (in terms of memory utilization) and then suddenly jumps a huge amount after switching tabs and then back again.  It needs more investigation.
    Logging Plugin:  Added the ability to download logs in the self-contained recording format.
    NOTE:  Something strange is going on with log titles and the new telnet protocol support in  It'll be fixed soon.
Commits on Feb 3, 2012
  1. Documentation: *Lots* of docstring updates as well as updates to the …

    …individual documentation files.
    Documentation:  Changed the CSS around to make it match the forthcoming website's color scheme.  I also added the new logo :)  Removed the argument that _capture_image() took...  It was unnecessary since it simply used self.image anyway.
Commits on Feb 2, 2012
  1. TORNADO 2.2 IS OUT. This version is now required to use Gate One as i…

    …t includes important updates to the WebSocket module.
    NEW PLUGIN:  Notice.  It is as simple as can be:  It registers a special optional escape sequence handler that displays a message in the browser whenever it is encountered.  Try it:  python -c "print('\x1b]_;notice|This is a test message\x07')"
    gateone.js:  Removed an odd non-breaking space (\xa0) from line 810.  How'd that get there?  LOL
    gateone.js:  Changed the use of █ inside getEmDimensions() to be "\u2588".  Why?  Because I've been testing JS minifiers and some of them *really* don't like actual unicode characters to be in the source.  Changed around JSPluginHandler quite a bit...  It was never really working the way I wanted it to before.  It should now automatically re-create combined_plugins.js (when requested) if anything happens to that file--even while Gate One is running.  _send_refresh() now checks if there wasn't actually a screen update before it sends 50+ blank strings to the client :) (this would happen sometimes when the underlying fd has a change of some sort that doesn't actually change the screen's output--something like a trailing escape sequence).  Modified this script to use the new notice plugin when displaying a message about utilizing an existing SSH tunnel (looks nice!).  All paths are now using os.path.join().  Made a few little tweaks here and there in addition to the above.  Nothing special...  Just changed around what gets printed and added some extra logic for non-posix platforms (you never know).  Fixed three long-standing (but rarely encountered) bugs with text renditions:
        1) Where they would sometimes not get reset properly in a transition from one state (say, [0,32]) to another (say, [0,1,32]).
        2) _erase_characters() was setting the renditions it erased to [] instead of [0].
        3) Backspaces were setting the (now deleted) rendition to None instead of [0].
    CSS Terminal Text Colors:  Loads of tweaks here and there that I've been putting off forever...  *All* text rendition tests inside of are now passing except for the 256-color 'reverse' test.  To fix that is going to require some interesting color research.  Might have to wait until after 1.0.
    CSS Themes:  Tweaked the encircle class considerably in order to make it so that encircled text doesn't extend beyond the usual font box size (not that anything actually uses encircled text :).  The left bar/double-bar and right bar/double-bar classes also got similar treatment.
    CSS Themes:  Moved some of the generic, non-theme-specific CSS text classes (e.g. blink, underline, italic, etc) to the term_colors CSS files.
    Documentation:  Updated the requirements in the "About Gate One" page.
Commits on Dec 1, 2011
  1. Ampersands are now converted into HTML entities (&amp;) …

    …just like < and >. This should fix #78  Added a little check to refresh_screen() so that it won't throw an exception if the client sends a null terminal number.  It now accepts --prefix=/install/path or --home=/install/path to specify where Gate One will be installed.  This should fix #74  Removed check_output() from the imports since it isn't being used and doesn't work with Python 2.6.  This should fix #16
    Major changes to CSS and class names throughout the code:  From now on, only IDs and NAMEs will use GateOne.prefs.prefix.  This is because I've changed all the CSS classes to only apply if they're inside of GateOne.prefs.goDiv.  This should simplify things a bit and I also noticed it reduced the size of the JS code a bit.  Also, added support for -ms-transform and -khtml-transform to the CSS (to support Konqueror and IE9+, respectively--assuming that these two browsers add WebSocket support eventually).
    Changed how logging was initialized in various plugins so that they match how it's done in gateone.js.
    Bookmark plugin:  The "new bookmark" form looks decent again.
    Bookmark plugin:  LOADS of changes.  Backported TONS of stuff from though much of it is incomplete or not working yet.  Please bear with me on this one...  Even though it is only semi-usable I wanted to get this commit in since it has so many other important fixes.
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 Oct 25, 2011
  1. Added internationalization (i18n) support. I'm using pybabel to gener…

    …ate the .pot and .po files. There's some basic instructions on how to use it inside of the babel_gateone.cfg file. All translations are appreciated!
    NOTE: Right now only python files are working with translations.  Tornado templates are next, then JavaScript.
    Added an internationalization plugin named, "i18n" that is meant for international keyboard layouts.  It allows users to select a keyboard layout from the gateone/plugins/i18n/static/keyboard_layouts directory.  These layouts will be presented to the user by name (minus the .js) and should use the following naming convention:  "Name (locality).js".  Examples: "Português (Brasil).js".  Names should be native to the layout (I've always wondered why non-English keyboard layouts and language options were always presented to users using English names--doesn't make much sense, does it?  Am I crazy?).  If the language is right-to-left please feel free to put the locality (in parentheses) on the left!
    NOTE: The layouts don't actually get loaded yet...  I need to write some hooks into savePrefs() for use with plugins before it will work.  Will probably be in the next commit.
    Plugins are expected to have their own translations using the following layout:  gateone/plugins/<plugin name>/i18n/<plugin name>.pot with respective translations in gateone/plugins/<plugin name>/i18n/<locale>/LC_MESSAGES/*.  Official documentation/examples on this is forthcoming.
    Changed the way CSS schemes are stored and used:  They're now called "themes" and the terminal colors have been separated out into their own .css files.  This way users can choose the colors for their text separate from the theme.  CSS themes are now placed in the gateone/templates/themes directory and terminal color schemes are in the gateone/templates/term_colors directory.
    Added some callbacks to the GateOne.Visual.togglePanel function so it is now possible to only call certain panel-specific functions when a panel is opened or closed.
    Now when you open the preferences panel it will make a call to the server asking it to enumerate all the CSS themes and colors schemes that are available.  So if you add some new CSS files to the server your clients won't need to reload the page.  This was implemented using the aforementioned togglePanel() callbacks.
    Added support for Alt-<key> combinations.  Apparently I forgot all about these before today!
    Tweaked the code in gateone.js that controls whether or not the terminal shows up as contentEditable in order to make it less likely that the screen will go wonky when a user clicks on a preference panel form element.
Commits on Oct 18, 2011
  1. Completed the application of the PAM authentication patch from Alan S…

    …chmitz (Thanks again!)... Added a docstring, updated other docstrings, and updated the documentation to reflect this new option. Also, unrelated: Added README.rst to and added a newline to the end of it so it will look right when you cat the file on the command line.
Commits on Oct 13, 2011
Something went wrong with that request. Please try again.