Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
branch: master
Commits on Sep 2, 2014
  1. core/server.py: Modified `install_license()` to install license files…

    authored
    … into the settings_dir instead of the GATEONE_DIR. This should allow licenses to persist after re-installation of Gate One.
    
    core/server.py:  Removed `set_license()` and replaced it with `validate_licenses()` which both validates the licenses in Gate One's settings as well as sets the `__license_info__` global.
    core/server.py:  Added a little conditional to `ApplicationWebSocket.on_message()` to differentiate between exceptions that occur trying to execute WebSocket actions and unknown WebSocket actions.
    core/server.py:  Removed the unused references to `self.user` inside `ApplicationWebSocket`.  They're leftovers from a time before I realized that `tornado.web.WebSocketHandler` used `self._current_user` in exactly the same way as all the regular HTTP handlers.
    gateone.js:  Removed the check inside of `GateOne.Visual.switchWorkspace()` that has it return (and do nothing) if we're switching to the workspace that is already active.  The reason for this is because one application can replace another inside of a workspace in an instant and when that happens we need the 'go:switch_workspace' event to fire so applications can know that they have become active.
    gateone.js:  Fixed a bug in `GateOne.Visual.slideToWorkspace()` that had the 'go:ws_transitionend' event being fired multiple times unnecessarily under certain circumstances.
    Playback Plugin:  Fixed a bug in `GateOne.Playback.savePrefsCallback()` that was preventing the 'playbackFrames' array from being reset properly when a user saved their preferences (this would result in certain prefs not being saved at all).
    Playback Plugin:  Gave it an all-around optimization (in the form of reduced code size).
    terminal.js:  Removed the logic that removes the terminal info element when the mouse is moved because it causes it to be removed too quickly now that I've changed the way it's layed out via CSS.
    terminal.js:  `GateOne.Terminal.alignTerminal()` now gets called whenever a new terminal is created.  This should alleviate the out-of-alignment terminal problem that can occur immediately after sole new terminals are created and when resuming a session.
Commits on Sep 1, 2014
  1. terminal.js: Made some performance enhancements to `GateOne.Terminal.…

    authored
    …applyScreen()`. It now uses `window.requestAnimationFrame()` and batches DOM updates. Also, instead of comparing the incoming screen array lines to the innerHTML of the existing screen lines in the DOM it compares the incoming screen array to the saved screen array inside of `GateOne.Terminal.terminals`. This saves the browser (JavaScript engine) from having to parse the DOM for the line-by-line comparison (it checks for differences and only applies what has changed).
    
    terminal.js:  Optimized `GateOne.Terminal.termUpdateFromWorker()`; it now has all variables declared at the top and all try/catch blocks have been removed (since they apparently prevent V8 from optimizing the function).
Commits on Aug 31, 2014
  1. docker/README.md: Updated to reflect the fact that Gate One runs as r…

    authored
    …oot inside the container now.
  2. Dockerfile and 99docker.conf: Changed to have Gate One run as root si…

    authored
    …nce Docker's automated build process doesn't work with non-root users at the moment (see: docker/docker#5892).
  3. gateone.js: Fixed the bug where the New Workspace Workspace would som…

    authored
    …etimes not show up if you were connecting for the first time (not resuming a session).
  4. core/server.py: Refactored `ApplicationWebSocket.get_theme()` so that…

    authored
    … it keeps track of individual theme file modification times like all the other file sync methods. The end result is a 30-40% speedup when a theme is rendered the first time and a 70-130% speedup on subsequent calls. Not bad!
Commits on Aug 30, 2014
  1. core/configuration.py: Improved the help texts. This included adding …

    authored
    …'cas' as one of the valid authentication options displayed for the --auth option.
    
    core/configuration.py:  Commands output by `print_help()` are now sorted alphabetically.
  2. Terminal Themes: Finally fixed the terminal info display so that it s…

    authored
    …hows up properly centered in Firefox.
    
    Black Theme:  Reduced the border radius of panels slightly.  Corners should look a bit less cartoony now.
    Bookmarks Solarized Theme:  Bookmark elements should blend in better with the rest of the theme now.
    Solarized Theme:  The New Workspace Workspace matches the rest of the theme now.
    All Themes:  Removed the use of prefixed linear-gradients since those are no longer necessary (the final syntax has been settled upon for a while now; all browsers now support "the one true linear-gradient syntax" =).
    terminal.js:  The function that gets called on the "go:ws_transitionend" event now only calls `GateOne.Terminal.alignTerminal()` if the `GateOne.User.activeApplication` is "Terminal".
    gateone.js:  `GateOne.User.workspaceApp()` now sets the active application to null when the workspace has yet to have a 'data-application' attribute.
    gateone.js:  `GateOne.User.setActiveApp()` can now take null as an argument.
    gateone.js:  `GateOne.Visual.newWorkspaceWorkspace()` now sets the 'data-application' attribute to "New Workspace Workspace" when creating new workspaces.
    gateone.js:  `GateOne.Visual.slideToWorkspace()` now explicitly fires the "go:ws_transitionend" event when `GateOne.prefs.disableTransitions` is `true`.  This should ensure that functions attached to that event get fired if the user has CSS transitions disabled.
    gateone.js:  `GateOne.Visual.switchWorkspace()` now skips triggering the "go:switch_workspace" event if the current workspace is the one being switched to (i.e. not really switching anything).
    gateone.js:  Fixed a minor bug in `GateOne.Visual.slideLeft()` and `GateOne.Visual.slightRight()` where it wasn't calling `GateOne.Visual.stopIndicator()` when it was supposed to.
    terminal.js:  `GateOne.Terminal.switchWorkspaceEvent()` now checks `GateOne.User.activeApplication` before trying to enumerate all terminals to find the one is attached to the switched workspace.  It also checks for the presence of the various panel checkboxes before it tries to make changes to them.
    terminal_input.js:  Fixed a typo in `GateOne.Terminal.Input.disableCapture()` that was preventing the ✈IME element from being hidden when it was supposed to.
    core/server.py:  Added a new 'validate_authobj' CLI command that can be used to validate API authentication objects (JSON).
    core/server.py:  Added a --help option to `install_license()`.
    core/server.py:  Added a --help option to `broadcast_message()`.
    core/server.py:  Changed how CLI commands are parsed and used slightly.  Instead just a big dict of "'command name': function" the dict is in a "'module':{'command name': 'function': function, 'description': 'short descriptive text'}" format.  This allows the new --help stuff to display more useful information about each command.
    core/configuration.py:  Changed how the --help text is printed.  It now includes all CLI 'commands' and wraps at your actual terminal width as opposed to being hard-wrapped at 79 characters like it was previously.
Commits on Aug 29, 2014
  1. terminal.js: Forgot to uncomment something I was testing out. Termina…

    authored
    …l info messages should go away on their own again :)
  2. terminal_input.js: Fixed the bug that was preventing certain global s…

    authored
    …hortcuts from working properly (e.g. Ctrl-Shift-<arrows> to change workspaces).
    
    terminal.js:  `GateOne.Terminal.alignTerminal()` now uses the currently-selected terminal if no terminal number is given.
    terminal.js:  `GateOne.Terminal.alignTerminal()` is now attached to the "go:ws_transitionend" event (see below).
    terminal.js:  Changed a number of events calls inside `GateOne.Terminal.init()` to be called after the 'go:css_loaded' event instead of 'go:js_loaded' due to the fact that a lot of things won't get calculated properly unless the CSS is done loading.
    terminal.js:  Fixed an issue where sometimes terminal restores would be missing newlines on otherwise empty lines.
    terminal.js:  Lots of changes all around to functions that call `GateOne.Terminal.alignTerminal()`.  They are no longer necessary with the new logic.
    gateone_input.js:  Code cleanup/optimization.
    gateone.js:  Added a new function: `GateOne.User.setActiveApp()` which sets just sets the `GateOne.User.activeApplication` attribute to the name passed as the first argument.
    gateone.js:  Added a new function: `GateOne.User.workspaceApp()` which gets attached to the 'go:switch_workspace' event inside of `GateOne.User.init()`.  It calls the new setActiveApp() function (to do the obvious).
    gateone.js:  Greatly improved `GateOne.Visual.slideToWorkspace()`:  It now uses the transitionend event for precision timing.  It also sets and unsets a new variable that can be used to determine if a workspace transition is in progress: `GateOne.Visual.transitioning`.  It also now fires the "go:ws_transitionend" event when the user has finished selecting a new workspace.
    gateone.js:  Made some improvements to the logging/message features of `GateOne.Base.superSandbox()`.
    The two new `GateOne.User` functions should allow more accurate tracking of which application is currently active on the page.  This was necessary in order to fix the situation where terminals embedded *outside* the #gateone element would either receive input *or* work with global shortcuts.  We need both to work at the same time.
    server.py:  A bit of code cleanup.
    core/utils.py:  Changed the docstring of create_signature() to match how it's done inside core/server.py
    core/server.py:  Made some minor improvements to the `ApplicationWebSocket.api_auth()` function in regards to certain edge cases and logging.
    hello_embedded:  Changed the code that shows how to embed a terminal outside of Gate One so that it no longer sets the style of the #gateone element to 'display: none;'.  When you have 'embedded: true' there's no reason to hide that element and it will mess up the focus/keyboard events.
Commits on Aug 28, 2014
  1. gateone.js: You can now set GateOne.prefs.pingTimeout to 0/null/false…

    authored
    … to disable that feature.
    
    gateone.js:  You can now set GateOne.prefs.keepaliveInterval to 0/null/false to disable keepalive pings.
    gateone.js:  The default `GateOne.prefs.keepalive` ping has been modified from 15s to 60s.
    gateone.js:  The default `GateOne.prefs.pingTimeout` has been increased from 5s to 10s.
    gateone.js:  `GateOne.Base.dependencyTimeout` has been increased from 15s to 30s.
    gateone.js:  `GateOne.restoreDefaults()` is much more explicit now and shouldn't mess up the hello_embedded tutorial anymore.
    terminal_input.js:  Changed `GateOne.Terminal.Input.capture()` and `GateOne.Terminal.Input.disableCapture()` to attach keydown and keyup events to the IME node instead of just attaching them to the `GateOne.node` (aka `GateOne.prefs.goDiv`).  Also changed these functions to place the ✈IME textarea on the document.body.  These changes were necessary to handle the situation where terminals are created somewhere other than inside the `GateOne.node` (e.g. #gateone).  So if you create a terminal somewhere else on the page keyboard input should continue working now.
    terminal_input.js:  Modified `GateOne.Terminal.Input.emulateKey()` slightly so that it handles Shift-Insert instead of relying on the global key combo event (which doesn't appear to work anymore thanks to the aforementioned changes).
    Removed the 256colors2.pl and xterm-colortest.pl scripts from the tests directory since test_term_renditions.py covers all those bases.
    tests/hello_embedded/static/index.html:  Revamped the whole hello_embedded tutorial.  Everything works again.  Not done yet though...  It needs a complete overhaul!  I *did* add an example of how to embed terminals outside of the #gateone element though.  This should close issue #459 (#459) and issue #441 (#441).
    Themes:  Set the 'color' of `.✈new_workspace_workspace_title` in all themes so it doesn't get overridden by (generic) external CSS.
    core/log.py:  Fixed a bug in `JSONAdapter.process()` that could result in lost connections if certain non-ascii characters were passed to that kind of logger.
    applications/terminal/plugins/ssh/scripts/timeout.sh: Removed the -e switch that gets passed to echo.  It isn't supported on a lot of systems and isn't needed in most cases.
    core/server.py:  Added a new CLI command and associated function:  install_license (e.g. gateone install_license).  It is not quite complete but it was created at the request of a (paying) customer that wanted an easy way to track Gate One licenses.  It is completely inapplicable to those adhering to the AGPLv3.
    core/server.py:  Added a new WebSocket action that can be used to query the license information:  go:license_info
Commits on Aug 25, 2014
  1. gateone.js: Added the `dialogTitle` (dialog titlebar node) as an attr…

    authored
    …ibute of dialogs so that the titlebar width/height is easy to check.
    
    gateone.js:  Modified how the "Disable CSS transitions" setting works...  It should apply to *everything* under the #gateone element now as opposed to just workspaces.
    gateone.js:  Made the most minor of optimizations to `GateOne.Visual.updateDimensions()`.
    applications/terminal/logviewer.py:  Fixed a bug where the --flat output mode was showing the numerical month where the day should be.  This should resolve issue #461 (#461)
Commits on Aug 24, 2014
  1. core/server.py: Removed the code that restarts Gate One after the las…

    authored
    …t user logs out. Turns out it messes up a lot of the time on a lot of platforms. It just isn't worth it.
  2. async/async.py: Fixed a typo in some docstrings and comments.

    authored
    async/async.py:  Added some better exception handling to `_call_complete()`.
    core/server.py:  Added `ApplicationWebSocket.set_dimensions()` which is controlled via the 'go:set_dimensions' WebSocket action (sent from the client).  It just sets `self.dimensions` with various information about the client's sizes of things so that server-side applications (like X11) know how big things are at the client so as to size things appropriately.
    gateone.js:  Updated `GateOne.Visual.updateDimensions()` so that it sends the 'go:set_dimensions' WebSocket action whenever the user resizes the window (or something calls updateDimensions() explicitly).
    gateone.js:  `GateOne.Visual.updateDimensions()` now only triggers the 'go:update_dimensions' event (and the new 'go:set_dimensions' WebSocket action) if dimensions were changed.  Should work a lot more efficiently now (saves bandwidth too).
    gateone.js:  The "go:css_loaded" event now includes the 'message' that gets passed to `loadStyleAction()`.
    gateone.js:  `GateOne.Visual.init()` now only debounces the call to `GateOne.Visual.updateDimensions()` when attaching to the window's 'resize' event.
    gateone.js:  The call to `GateOne.Visual.updateDimensions()` inside of `GateOne.init()` now gets called inside the "go:connection_established" event (to ensure that everything is setup before we try to send updates to the server).
    gateone.js:  A bit of code optimization here and there (mostly just replaced the use of ['someattribute'] with .someattribute).
    gateone.js:  Made logs of improvements to `GateOne.Visual.dialog()`.  It should work much more efficiently now with certain callbacks only being called *once* when necessary as opposed to every second the mouse moves :)
Commits on Aug 22, 2014
  1. Dockerfile: Revered the change made in the previous commit since it d…

    authored
    …idn't fix the problem. There's obviously something broken right now with Docker's automated build process. I recommend everyone just build from this Dockerfile directly until Docker gets that fixed.
  2. Dockerfile: Attempting to work around a strange issue with Docker's a…

    authored
    …utomated builder where it's setting the permissions on directories to 'd--x--x---' (which is just plain wacky). This is causing Gate One to fail starting up.
Commits on Aug 21, 2014
  1. 60docker.conf: Changed where the pid file is stored (/tmp/gateone.pid…

    authored
    … makes more sense).
    
    Dockerfile:  Combined some things into a single RUN statement.
  2. Renamed 99docker.conf to 60docker.conf to make it easier to override …

    authored
    …settings inside the Docker container.
  3. playback.js: Fixed a typo on line 390 that was causing mostly unimpor…

    authored
    …tant exceptions to show up in the JS console under certain circumstances.
    
    gateone_misc.js:  Added `GateOne.i18n.gettext()` to the globally-exported shortcuts.
    app_terminal.py:  Fixed a bug that would result in a harmless exception being logged if the user clicked the "Generate Sharing ID" button in the Share Terminal dialog before actually sharing anything.
    app_terminal.py:  Fixed a bug in `TerminalApplication.detach_shared_terminal()` where you'd get an exception turning off terminal sharing for any given terminal.
    terminal.js:  Fixed a typo that was causing terminal sharing to fail in Firefox.
    Terminal Colors:  Brightened the "Bright" white foreground and background colors a bit to differentiate them from plain white.  This should resolve issue #192 (#192).
    Dockerfile:  Updated to work with Docker's automated build mechanism so the liftoff/gateone repo shows up as "Trusted".  Also added a README.md so that the repo detailed description stays up-to-date.  Also added psutil to the pip install list since it's a dependency of the forthcoming X11 app.
    gateone.js:  Added a callback option to the `GateOne.User.listUsers()` function.  Mostly because it makes it easier to debug.
  4. Dockerfile: Now that the Docker-related files are in the repo there's…

    authored
    … no need to use the ADD functionality. It has been replaced with simple 'cp' operations that copy the files out of the cloned GateOne repo. These changes should allow me to upload the Dockerfile to the Docker hub as well.
  5. NEW FEATURE: Docker support!

    authored
    There's a new directory inside GateOne: Docker.  In that directory you'll find a Dockerfile, a 99docker.conf, and an 'update_and_run_gateone.py' script.  Together they form a nice little unit for executing Gate One inside a Docker container.  If you want to know how to use it just have a look at the Dockerfile.  It has a nice long comment at the top describing how to do everything.
  6. Themes: Most minor of tweaks to panels to add some bottom padding.

    authored
    gateone.js:  Fixed the bug that was preventing panels from toggling in and out properly.
  7. gateone.js: Changed how `GateOne.Utils.showElements()` and `GateOne.U…

    authored
    …tils.hideElements()` work again. This time I made the logic a *lot* simpler. Don't know why I didn't think of this method before, hah.
  8. core/server.py: Made a few minor changes to the early log_file_prefix…

    authored
    … detection to better handle first-run situations. Also added some better error messages for the situation where the set uid/gid don't exist.
    
    gateone.js:  Modified `GateOne.Utils.showElements()` and `GateOne.Utils.hideElements()` to work more like their singular counterparts (using classList and whatnot).
    terminal_input.js:  Wrapped the logic that unhides the pastearea after copy operations in a 50ms timeout to workaround what appears to be a bug in Chrome on macs.  It's short enough that no one should ever notice.
Commits on Aug 20, 2014
  1. Themes: Modified the '.✈dialogcontainer h3' slightly as a fix for an …

    authored
    …issue with the X11 application (which I'm actively working on again).
    
    core/server.py:  Changed some the early logic inside of main() to try to detect/handle the situation where the `log_file_prefix` base directory does not exist.
    core/configuration.py:  Added a new '--configure' option that tells Gate One to configure its settings (first-run situation) and create SSL keys/certs before quitting.  It will not start up any Gate One processes.  The purpose being to make it easier to run Gate One inside a Docker container.
    core/server.py:  Added support for the new '--configure' option (it just calls sys.exit() after everything is done being written).
Commits on Aug 18, 2014
  1. core/configuration.py: Added a new 'multiprocessing_workers' setting/…

    authored
    …CLI option that controls how many cores Gate One will use when using multiprocessing. If set to 0 it will disable multiprocessing altogether. Note that disabling multiprocessing can actually *increase* memory usage since Gate One doesn't keep unused multiprocessing processes alive for long (30 seconds if idle by default).
    
    core/server.py:  Relocated some things related to the CPU_ASYNC global in order to support the new 'multiprocessing_workers' setting.
    onoff.py:  Modified the way `OnOffMixin.trigger()` works slightly in order to improve performance.  Also, when debug logging is enabled the args/kwargs output won't be enormously long anymore.
Commits on Aug 17, 2014
  1. Renamed templates/settings/10server.conf to templates/settings/generi…

    authored
    …c.conf since it is used for a lot more than just the 10server.conf and it's very generic (not specific to the 10server.conf at all).
    
    core/server.py:  Changed the call to `sys.uname().sysname` to be `sys.uname()[0]` for backwards compatibility with Python 2 (apparently only Python 3 has that .sysname attribute).
    core/configuration.py:  Updated to reflect the new generic.conf file.
    core/configuration.py:  Added 'combine_js', 'combine_css', and 'combine_css_container' to the list of `non_options` so these CLI-only options don't end up in the 10server.conf when it gets generated automatically (e.g. when Gate One is run the first time).
    terminal/plugins/bookmarks.py:  Added some @require(authenticated()) decorators.  Mostly to prevent odd exception messages from showing up in the logs when the cookie_secret is changed.
    terminal/app_terminal.py:  `TerminalApplication.terminals()` now requires the user be authenticated.  For the same reason as the change to bookmarks.py.
  2. logviewer.py: Modified the usage help information slightly so that it…

    authored
    … will display 'gateone logviewer' when run via the 'gateone' command and just 'logviewer.py' when run directly.
    
    Example Application:  Changed the instructions in regards to how to remove/disable it inside the JavaScript since they were out of date.
Commits on Aug 14, 2014
  1. COMPATIBILITY NOTE: As of this commit Gate One now requires Tornado 4…

    authored
    ….0+. See below for details why (if you care).
    
    applications/terminal/app_terminal.py:  Got rid of the `term_log` global (it was mostly used in a few places and most of the time `self.term_log` would be better).
    applications/terminal/policy.py:  Removed the unused `term_log` global.
    core/configuration.py:  Added 'version' to the list of settings that should never end up in any *.conf file.
    core/server.py:  Added a check for Solaris to ensure we don't try to automatically restart the Gate One process because--for whatever reason--that doesn't work properly on Solaris.
    core/server.py:  Gate One now uses the check_origin() function built into Tornado 4.0+.  This means that you need Tornado 4.0+ to use Gate One now.  It's a better/faster method so it's worthwhile.
Commits on Aug 7, 2014
Commits on Aug 6, 2014
  1. applications/terminal/app_terminal.py: Got rid of the `term_log` glob…

    authored
    …al (it was mostly used in a few places and most of the time `self.term_log` would be better).
    
    applications/terminal/policy.py:  Removed the unused `term_log` global.
    core/configuration.py:  Added 'version' to the list of settings that should never end up in any *.conf file.
    core/server.py:  Added a check for Solaris to ensure we don't try to automatically restart the Gate One process because--for whatever reason--that doesn't work properly on Solaris.
Commits on Aug 2, 2014
  1. core/server.py: Moved the CPU_ASYNC.call() check down below the call …

    authored
    …to drop_privileges() so that it doesn't result in exceptions on systems running Gate One as a user other than root.
    
    async/async.py:  Added an extra little check to `AsyncRunner.call()` for sutations where functions don't take arguments *and* the function name cannot be determined.
Something went wrong with that request. Please try again.