├── inbucket.bat ├── themes ├── integral │ ├── templates │ │ ├── mailbox │ │ │ ├── _html.html │ │ │ ├── _list.html │ │ │ └── _show.html │ │ └── root │ │ │ └── index.html │ └── public │ │ └── images │ │ ├── favicon.png │ │ ├── img01.gif │ │ ├── img02.gif │ │ ├── img03.gif │ │ ├── img04.gif │ │ ├── img05.gif │ │ ├── img06.gif │ │ ├── img07.gif │ │ ├── img08.gif │ │ ├── img09.gif │ │ └── img11.gif ├── bootstrap │ ├── templates │ │ ├── mailbox │ │ │ └── _html.html │ │ └── root │ │ │ └── index.html │ └── public │ │ ├── bower_components │ │ ├── jquery-color │ │ │ ├── test │ │ │ │ ├── data │ │ │ │ │ ├── testinit.js │ │ │ │ │ └── swarminject.js │ │ │ │ ├── unit │ │ │ │ │ └── .jshintrc │ │ │ │ ├── jquery.js │ │ │ │ ├── index.html │ │ │ │ └── test.html │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── .jshintrc │ │ │ ├── .bower.json │ │ │ ├── AUTHORS.TXT │ │ │ ├── color.jquery.json │ │ │ ├── package.json │ │ │ └── MIT-LICENSE.txt │ │ ├── jquery-sparkline │ │ │ ├── version.txt │ │ │ ├── src │ │ │ │ ├── footer.js │ │ │ │ └── rangemap.js │ │ │ ├── minheader.txt │ │ │ ├── bower.json │ │ │ ├── README.md │ │ │ ├── .bower.json │ │ │ ├── sparkline.jquery.json │ │ │ └── Makefile │ │ ├── jquery │ │ │ ├── src │ │ │ │ ├── outro.js │ │ │ │ ├── var │ │ │ │ │ ├── arr.js │ │ │ │ │ ├── deletedIds.js │ │ │ │ │ ├── rnotwhite.js │ │ │ │ │ ├── document.js │ │ │ │ │ ├── push.js │ │ │ │ │ ├── slice.js │ │ │ │ │ ├── concat.js │ │ │ │ │ ├── indexOf.js │ │ │ │ │ ├── class2type.js │ │ │ │ │ ├── pnum.js │ │ │ │ │ ├── toString.js │ │ │ │ │ ├── documentElement.js │ │ │ │ │ ├── hasOwn.js │ │ │ │ │ ├── support.js │ │ │ │ │ └── rcssNum.js │ │ │ │ ├── selector.js │ │ │ │ ├── ajax │ │ │ │ │ ├── var │ │ │ │ │ │ ├── rquery.js │ │ │ │ │ │ ├── location.js │ │ │ │ │ │ └── nonce.js │ │ │ │ │ ├── parseJSON.js │ │ │ │ │ ├── parseXML.js │ │ │ │ │ └── script.js │ │ │ │ ├── css │ │ │ │ │ ├── var │ │ │ │ │ │ ├── rmargin.js │ │ │ │ │ │ ├── cssExpand.js │ │ │ │ │ │ ├── rnumnonpx.js │ │ │ │ │ │ ├── isHidden.js │ │ │ │ │ │ ├── getStyles.js │ │ │ │ │ │ └── swap.js │ │ │ │ │ ├── hiddenVisibleSelectors.js │ │ │ │ │ ├── addGetHookIf.js │ │ │ │ │ └── showHide.js │ │ │ │ ├── manipulation │ │ │ │ │ ├── var │ │ │ │ │ │ ├── rleadingWhitespace.js │ │ │ │ │ │ ├── rtagName.js │ │ │ │ │ │ ├── rcheckableType.js │ │ │ │ │ │ ├── rscriptType.js │ │ │ │ │ │ └── nodeNames.js │ │ │ │ │ ├── _evalUrl.js │ │ │ │ │ ├── createSafeFragment.js │ │ │ │ │ ├── setGlobalEval.js │ │ │ │ │ ├── getAll.js │ │ │ │ │ ├── wrapMap.js │ │ │ │ │ └── support.js │ │ │ │ ├── data │ │ │ │ │ ├── var │ │ │ │ │ │ ├── dataPriv.js │ │ │ │ │ │ ├── dataUser.js │ │ │ │ │ │ └── acceptData.js │ │ │ │ │ ├── support.js │ │ │ │ │ └── accepts.js │ │ │ │ ├── core │ │ │ │ │ ├── var │ │ │ │ │ │ └── rsingleTag.js │ │ │ │ │ ├── DOMEval.js │ │ │ │ │ ├── support.js │ │ │ │ │ ├── parseHTML.js │ │ │ │ │ └── access.js │ │ │ │ ├── traversing │ │ │ │ │ └── var │ │ │ │ │ │ ├── rneedsContext.js │ │ │ │ │ │ ├── siblings.js │ │ │ │ │ │ └── dir.js │ │ │ │ ├── event │ │ │ │ │ ├── support.js │ │ │ │ │ ├── ajax.js │ │ │ │ │ ├── alias.js │ │ │ │ │ └── focusin.js │ │ │ │ ├── attributes.js │ │ │ │ ├── effects │ │ │ │ │ ├── animatedSelector.js │ │ │ │ │ └── support.js │ │ │ │ ├── selector-sizzle.js │ │ │ │ ├── .jshintrc │ │ │ │ ├── exports │ │ │ │ │ ├── global.js │ │ │ │ │ └── amd.js │ │ │ │ ├── deferred │ │ │ │ │ └── exceptionHook.js │ │ │ │ ├── queue │ │ │ │ │ └── delay.js │ │ │ │ ├── jquery.js │ │ │ │ ├── deprecated.js │ │ │ │ ├── attributes │ │ │ │ │ └── support.js │ │ │ │ └── intro.js │ │ │ ├── bower.json │ │ │ ├── .bower.json │ │ │ └── LICENSE.txt │ │ ├── moment │ │ │ ├── src │ │ │ │ ├── lib │ │ │ │ │ ├── locale │ │ │ │ │ │ ├── constructor.js │ │ │ │ │ │ ├── pre-post-format.js │ │ │ │ │ │ ├── invalid.js │ │ │ │ │ │ ├── ordinal.js │ │ │ │ │ │ ├── calendar.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── set.js │ │ │ │ │ │ ├── formats.js │ │ │ │ │ │ ├── locale.js │ │ │ │ │ │ ├── relative.js │ │ │ │ │ │ └── lists.js │ │ │ │ │ ├── moment │ │ │ │ │ │ ├── now.js │ │ │ │ │ │ ├── clone.js │ │ │ │ │ │ ├── creation-data.js │ │ │ │ │ │ ├── valid.js │ │ │ │ │ │ ├── to.js │ │ │ │ │ │ ├── from.js │ │ │ │ │ │ ├── moment.js │ │ │ │ │ │ ├── to-type.js │ │ │ │ │ │ ├── calendar.js │ │ │ │ │ │ ├── format.js │ │ │ │ │ │ ├── locale.js │ │ │ │ │ │ ├── get-set.js │ │ │ │ │ │ └── start-end-of.js │ │ │ │ │ ├── utils │ │ │ │ │ │ ├── is-undefined.js │ │ │ │ │ │ ├── has-own-prop.js │ │ │ │ │ │ ├── is-array.js │ │ │ │ │ │ ├── is-date.js │ │ │ │ │ │ ├── is-function.js │ │ │ │ │ │ ├── map.js │ │ │ │ │ │ ├── abs-ceil.js │ │ │ │ │ │ ├── abs-floor.js │ │ │ │ │ │ ├── defaults.js │ │ │ │ │ │ ├── to-int.js │ │ │ │ │ │ ├── zero-fill.js │ │ │ │ │ │ ├── hooks.js │ │ │ │ │ │ ├── extend.js │ │ │ │ │ │ ├── compare-arrays.js │ │ │ │ │ │ └── deprecate.js │ │ │ │ │ ├── create │ │ │ │ │ │ ├── local.js │ │ │ │ │ │ ├── utc.js │ │ │ │ │ │ ├── from-object.js │ │ │ │ │ │ ├── parsing-flags.js │ │ │ │ │ │ ├── date-from-array.js │ │ │ │ │ │ ├── valid.js │ │ │ │ │ │ ├── check-overflow.js │ │ │ │ │ │ └── from-string-and-array.js │ │ │ │ │ ├── units │ │ │ │ │ │ ├── constants.js │ │ │ │ │ │ ├── timezone.js │ │ │ │ │ │ ├── units.js │ │ │ │ │ │ ├── timestamp.js │ │ │ │ │ │ ├── minute.js │ │ │ │ │ │ ├── second.js │ │ │ │ │ │ ├── quarter.js │ │ │ │ │ │ ├── aliases.js │ │ │ │ │ │ ├── day-of-month.js │ │ │ │ │ │ └── day-of-year.js │ │ │ │ │ ├── duration │ │ │ │ │ │ ├── duration.js │ │ │ │ │ │ ├── abs.js │ │ │ │ │ │ ├── add-subtract.js │ │ │ │ │ │ ├── get.js │ │ │ │ │ │ └── constructor.js │ │ │ │ │ └── parse │ │ │ │ │ │ └── token.js │ │ │ │ └── locale │ │ │ │ │ ├── ja.js │ │ │ │ │ └── ar-tn.js │ │ │ ├── templates │ │ │ │ ├── globals.js │ │ │ │ ├── amd.js │ │ │ │ ├── amd-named.js │ │ │ │ ├── default.js │ │ │ │ ├── locale-header.js │ │ │ │ └── test-header.js │ │ │ ├── bower.json │ │ │ ├── .bower.json │ │ │ └── LICENSE │ │ ├── bootstrap │ │ │ ├── grunt │ │ │ │ ├── .jshintrc │ │ │ │ ├── bs-commonjs-generator.js │ │ │ │ ├── bs-raw-files-generator.js │ │ │ │ ├── configBridge.json │ │ │ │ └── bs-glyphicons-data-generator.js │ │ │ ├── less │ │ │ │ ├── mixins │ │ │ │ │ ├── center-block.less │ │ │ │ │ ├── size.less │ │ │ │ │ ├── opacity.less │ │ │ │ │ ├── text-emphasis.less │ │ │ │ │ ├── text-overflow.less │ │ │ │ │ ├── background-variant.less │ │ │ │ │ ├── tab-focus.less │ │ │ │ │ ├── labels.less │ │ │ │ │ ├── resize.less │ │ │ │ │ ├── progress-bar.less │ │ │ │ │ ├── nav-divider.less │ │ │ │ │ ├── reset-filter.less │ │ │ │ │ ├── alerts.less │ │ │ │ │ ├── nav-vertical-align.less │ │ │ │ │ ├── responsive-visibility.less │ │ │ │ │ ├── border-radius.less │ │ │ │ │ ├── reset-text.less │ │ │ │ │ ├── pagination.less │ │ │ │ │ ├── panels.less │ │ │ │ │ ├── hide-text.less │ │ │ │ │ ├── list-group.less │ │ │ │ │ ├── clearfix.less │ │ │ │ │ ├── table-row.less │ │ │ │ │ ├── image.less │ │ │ │ │ └── buttons.less │ │ │ │ ├── .csslintrc │ │ │ │ ├── wells.less │ │ │ │ ├── breadcrumbs.less │ │ │ │ ├── responsive-embed.less │ │ │ │ ├── component-animations.less │ │ │ │ ├── close.less │ │ │ │ ├── thumbnails.less │ │ │ │ ├── utilities.less │ │ │ │ ├── pager.less │ │ │ │ ├── media.less │ │ │ │ ├── mixins.less │ │ │ │ ├── labels.less │ │ │ │ ├── jumbotron.less │ │ │ │ ├── badges.less │ │ │ │ ├── bootstrap.less │ │ │ │ └── code.less │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── dist │ │ │ │ ├── fonts │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ │ └── npm.js │ │ │ ├── js │ │ │ │ └── .jshintrc │ │ │ ├── CHANGELOG.md │ │ │ ├── nuget │ │ │ │ ├── MyGet.ps1 │ │ │ │ ├── bootstrap.nuspec │ │ │ │ └── bootstrap.less.nuspec │ │ │ ├── bower.json │ │ │ ├── package.js │ │ │ ├── .bower.json │ │ │ └── LICENSE │ │ ├── clipboard │ │ │ ├── package.js │ │ │ ├── bower.json │ │ │ └── .bower.json │ │ └── jquery-load-template │ │ │ ├── bower.json │ │ │ └── .bower.json │ │ ├── favicon.png │ │ ├── bower.json │ │ └── inbucket.css └── greeting.html ├── swaks-tests ├── favicon.png ├── text.txt ├── nonmime-html.raw ├── mime-html.raw ├── README.md └── run-tests.sh ├── .travis.yml ├── .dockerignore ├── etc ├── redhat-el6 │ ├── README │ ├── inbucket.logrotate │ └── httpd-vhost.conf ├── ubuntu-12 │ ├── README │ ├── inbucket.logrotate │ └── inbucket-upstart.conf └── docker │ ├── defaults │ ├── start-inbucket.sh │ └── greeting.html │ ├── install.sh │ └── docker-run.sh ├── .goxc.json ├── httpd ├── rest.go ├── helpers_test.go └── context.go ├── .gitignore ├── .gitattributes ├── rest └── routes.go ├── Dockerfile ├── log ├── stdout_unix.go └── stdout_windows.go ├── webui ├── recent.go ├── routes.go └── root_controller.go ├── LICENSE └── smtpd └── datastore.go /inbucket.bat: -------------------------------------------------------------------------------- 1 | inbucket.exe etc\win-sample.conf -------------------------------------------------------------------------------- /themes/integral/templates/mailbox/_html.html: -------------------------------------------------------------------------------- 1 | {{.body}} 2 | -------------------------------------------------------------------------------- /themes/bootstrap/templates/mailbox/_html.html: -------------------------------------------------------------------------------- 1 | {{.body}} 2 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/data/testinit.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/version.txt: -------------------------------------------------------------------------------- 1 | 2.1.3 2 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | return jQuery; 2 | })); 3 | -------------------------------------------------------------------------------- /swaks-tests/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/swaks-tests/favicon.png -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/src/footer.js: -------------------------------------------------------------------------------- 1 | }))}(document, Math)); 2 | -------------------------------------------------------------------------------- /swaks-tests/text.txt: -------------------------------------------------------------------------------- 1 | This is a test mailing. 2 | 3 | This should be clickable: http://google.com/ 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() {} ); 2 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/constructor.js: -------------------------------------------------------------------------------- 1 | export function Locale() { 2 | } 3 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/deletedIds.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/favicon.png -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\?/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\S+/g ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/.gitignore: -------------------------------------------------------------------------------- 1 | build/.sizecache.json 2 | dist/ 3 | .DS_Store 4 | node_modules 5 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^margin/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.document; 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/integral/public/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/favicon.png -------------------------------------------------------------------------------- /themes/integral/public/images/img01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img01.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img02.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img03.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img03.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img04.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img04.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img05.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img05.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img06.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img06.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img07.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img07.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img08.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img08.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img09.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img09.gif -------------------------------------------------------------------------------- /themes/integral/public/images/img11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/integral/public/images/img11.gif -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | sudo: false 3 | 4 | before_script: 5 | - go vet ./... 6 | 7 | go: 8 | - 1.6.3 9 | - 1.7 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.location; 3 | } ); 4 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .goxc.json 3 | .goxc.local.json 4 | .travis.yml 5 | inbucket 6 | inbucket.exe 7 | swaks-tests 8 | target 9 | -------------------------------------------------------------------------------- /etc/redhat-el6/README: -------------------------------------------------------------------------------- 1 | Please see the RedHat installation guide on our website: 2 | 3 | http://www.inbucket.org/installation/redhat.html 4 | -------------------------------------------------------------------------------- /etc/ubuntu-12/README: -------------------------------------------------------------------------------- 1 | Please see the Ubuntu installation guide on our website: 2 | 3 | http://www.inbucket.org/installation/ubuntu.html 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/var/rleadingWhitespace.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^\s+/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /<([\w:-]+)/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // [[Class]] -> type pairs 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "test/qunit"] 2 | path = test/qunit 3 | url = git://github.com/jquery/qunit.git 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^(?:checkbox|radio)$/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^$|\/(?:java|ecma)script/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 3 | } ); 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/pre-post-format.js: -------------------------------------------------------------------------------- 1 | export function preParsePostFormat (string) { 2 | return string; 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/now.js: -------------------------------------------------------------------------------- 1 | export var now = function () { 2 | return Date.now ? Date.now() : +(new Date()); 3 | }; 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/is-undefined.js: -------------------------------------------------------------------------------- 1 | export default function isUndefined(input) { 2 | return input === void 0; 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/globals.js: -------------------------------------------------------------------------------- 1 | /*global window:false*/ 2 | 3 | import moment from "./moment"; 4 | 5 | window.moment = moment; 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | return document.documentElement; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // All support tests are defined in their respective modules. 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // Match a standalone tag 4 | return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/clone.js: -------------------------------------------------------------------------------- 1 | import { Moment } from './constructor'; 2 | 3 | export function clone () { 4 | return new Moment(this); 5 | } 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/has-own-prop.js: -------------------------------------------------------------------------------- 1 | export default function hasOwnProp(a, b) { 2 | return Object.prototype.hasOwnProperty.call(a, b); 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/amd.js: -------------------------------------------------------------------------------- 1 | /*global define:false*/ 2 | 3 | import moment from "./moment"; 4 | 5 | define([], function () { 6 | return moment; 7 | }); 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/is-array.js: -------------------------------------------------------------------------------- 1 | export default function isArray(input) { 2 | return Object.prototype.toString.call(input) === '[object Array]'; 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/invalid.js: -------------------------------------------------------------------------------- 1 | export var defaultInvalidDate = 'Invalid date'; 2 | 3 | export function invalidDate () { 4 | return this._invalidDate; 5 | } 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/amd-named.js: -------------------------------------------------------------------------------- 1 | /*global define:false*/ 2 | 3 | import moment from "./moment"; 4 | 5 | define("moment", [], function () { 6 | return moment; 7 | }); 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6 | 7 | } ); 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | } ); 7 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/is-date.js: -------------------------------------------------------------------------------- 1 | export default function isDate(input) { 2 | return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/minheader.txt: -------------------------------------------------------------------------------- 1 | /* jquery.sparkline @VERSION@ - http://omnipotent.net/jquery.sparkline/ 2 | ** Licensed under the New BSD License - see above site for details */ 3 | 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusin = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/is-function.js: -------------------------------------------------------------------------------- 1 | export default function isFunction(input) { 2 | return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; 3 | } 4 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkgs/inbucket/master/themes/bootstrap/public/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /etc/ubuntu-12/inbucket.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/inbucket.log { 2 | missingok 3 | notifempty 4 | create 0644 inbucket inbucket 5 | postrotate 6 | [ -x /sbin/reload ] && /sbin/reload inbucket >/dev/null 2>&1 || true 7 | endscript 8 | } 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/map.js: -------------------------------------------------------------------------------- 1 | export default function map(arr, fn) { 2 | var res = [], i; 3 | for (i = 0; i < arr.length; ++i) { 4 | res.push(fn(arr[i], i)); 5 | } 6 | return res; 7 | } 8 | -------------------------------------------------------------------------------- /swaks-tests/nonmime-html.raw: -------------------------------------------------------------------------------- 1 | Date: %DATE% 2 | To: %TO_ADDRESS% 3 | From: %FROM_ADDRESS% 4 | Subject: Swaks HTML 5 | MIME-Version: 1.0 6 | Content-Type: text/html; charset="UTF-8" 7 | 8 | This is a test of HTML at the top level. 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/abs-ceil.js: -------------------------------------------------------------------------------- 1 | export default function absCeil (number) { 2 | if (number < 0) { 3 | return Math.floor(number); 4 | } else { 5 | return Math.ceil(number); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/abs-floor.js: -------------------------------------------------------------------------------- 1 | export default function absFloor (number) { 2 | if (number < 0) { 3 | return Math.ceil(number); 4 | } else { 5 | return Math.floor(number); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /etc/redhat-el6/inbucket.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/inbucket.log { 2 | missingok 3 | notifempty 4 | create 0644 inbucket inbucket 5 | postrotate 6 | [ -e /etc/init.d/inbucket ] && /etc/init.d/inbucket reload >/dev/null 2>&1 || true 7 | endscript 8 | } 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/ordinal.js: -------------------------------------------------------------------------------- 1 | export var defaultOrdinal = '%d'; 2 | export var defaultOrdinalParse = /\d{1,2}/; 3 | 4 | export function ordinal (number) { 5 | return this._ordinal.replace('%d', number); 6 | } 7 | 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/local.js: -------------------------------------------------------------------------------- 1 | import { createLocalOrUTC } from './from-anything'; 2 | 3 | export function createLocal (input, format, locale, strict) { 4 | return createLocalOrUTC(input, format, locale, strict, false); 5 | } 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/utc.js: -------------------------------------------------------------------------------- 1 | import { createLocalOrUTC } from './from-anything'; 2 | 3 | export function createUTC (input, format, locale, strict) { 4 | return createLocalOrUTC(input, format, locale, strict, true).utc(); 5 | } 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/creation-data.js: -------------------------------------------------------------------------------- 1 | export function creationData() { 2 | return { 3 | input: this._i, 4 | format: this._f, 5 | locale: this._locale, 6 | isUTC: this._isUTC, 7 | strict: this._strict 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | } ); 12 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/constants.js: -------------------------------------------------------------------------------- 1 | export var YEAR = 0; 2 | export var MONTH = 1; 3 | export var DATE = 2; 4 | export var HOUR = 3; 5 | export var MINUTE = 4; 6 | export var SECOND = 5; 7 | export var MILLISECOND = 6; 8 | export var WEEK = 7; 9 | export var WEEKDAY = 8; 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/defaults.js: -------------------------------------------------------------------------------- 1 | // Pick the first defined of two or three arguments. 2 | export default function defaults(a, b, c) { 3 | if (a != null) { 4 | return a; 5 | } 6 | if (b != null) { 7 | return b; 8 | } 9 | return c; 10 | } 11 | -------------------------------------------------------------------------------- /themes/bootstrap/templates/root/index.html: -------------------------------------------------------------------------------- 1 | {{define "title"}}Inbucket{{end}} 2 | 3 | {{define "script"}}{{end}} 4 | 5 | {{define "menu"}} 6 | 10 | {{end}} 11 | 12 | {{define "content"}}{{.greeting}}{{end}} 13 | -------------------------------------------------------------------------------- /themes/integral/templates/root/index.html: -------------------------------------------------------------------------------- 1 | {{define "title"}}Inbucket{{end}} 2 | 3 | {{define "script"}}{{end}} 4 | 5 | {{define "menu"}} 6 | 10 | {{end}} 11 | 12 | {{define "content"}}{{.greeting}}{{end}} 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/var/nodeNames.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return "abbr|article|aside|audio|bdi|canvas|data|datalist|" + 3 | "details|dialog|figcaption|figure|footer|header|hgroup|main|" + 4 | "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; 5 | } ); 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browser": true, 3 | "curly": true, 4 | "eqnull": true, 5 | "eqeqeq": true, 6 | "expr": true, 7 | "jquery": true, 8 | "noarg": true, 9 | "onevar": true, 10 | "quotmark": "double", 11 | "trailing": true, 12 | "undef": true, 13 | "unused": true 14 | } 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/default.js: -------------------------------------------------------------------------------- 1 | ;(function (global, factory) { 2 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 3 | typeof define === 'function' && define.amd ? define(factory) : 4 | global.moment = factory() 5 | }(this, function () { 'use strict'; 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/traversing/var/siblings.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | return function( n, elem ) { 4 | var matched = []; 5 | 6 | for ( ; n; n = n.nextSibling ) { 7 | if ( n.nodeType === 1 && n !== elem ) { 8 | matched.push( n ); 9 | } 10 | } 11 | 12 | return matched; 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/effects/animatedSelector.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../selector", 4 | "../effects" 5 | ], function( jQuery ) { 6 | 7 | jQuery.expr.filters.animated = function( elem ) { 8 | return jQuery.grep( jQuery.timers, function( fn ) { 9 | return elem === fn.elem; 10 | } ).length; 11 | }; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/duration/duration.js: -------------------------------------------------------------------------------- 1 | // Side effect imports 2 | import './prototype'; 3 | 4 | import { createDuration } from './create'; 5 | import { isDuration } from './constructor'; 6 | import { getSetRelativeTimeThreshold } from './humanize'; 7 | 8 | export { 9 | createDuration, 10 | isDuration, 11 | getSetRelativeTimeThreshold 12 | }; 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/locale-header.js: -------------------------------------------------------------------------------- 1 | ;(function (global, factory) { 2 | typeof exports === 'object' && typeof module !== 'undefined' 3 | && typeof require === 'function' ? factory(require('../moment')) : 4 | typeof define === 'function' && define.amd ? define(['moment'], factory) : 5 | factory(global.moment) 6 | }(this, function (moment) { 'use strict'; 7 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/js/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi" : true, 3 | "browser" : true, 4 | "eqeqeq" : false, 5 | "eqnull" : true, 6 | "es3" : true, 7 | "expr" : true, 8 | "jquery" : true, 9 | "latedef" : true, 10 | "laxbreak" : true, 11 | "nonbsp" : true, 12 | "strict" : true, 13 | "undef" : true, 14 | "unused" : true 15 | } 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/core/DOMEval.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document" 3 | ], function( document ) { 4 | function DOMEval( code, doc ) { 5 | doc = doc || document; 6 | 7 | var script = doc.createElement( "script" ); 8 | 9 | script.text = code; 10 | doc.head.appendChild( script ).parentNode.removeChild( script ); 11 | } 12 | 13 | return DOMEval; 14 | } ); 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/to-int.js: -------------------------------------------------------------------------------- 1 | import absFloor from './abs-floor'; 2 | 3 | export default function toInt(argumentForCoercion) { 4 | var coercedNumber = +argumentForCoercion, 5 | value = 0; 6 | 7 | if (coercedNumber !== 0 && isFinite(coercedNumber)) { 8 | value = absFloor(coercedNumber); 9 | } 10 | 11 | return value; 12 | } 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/templates/test-header.js: -------------------------------------------------------------------------------- 1 | ;(function (global, factory) { 2 | typeof exports === 'object' && typeof module !== 'undefined' 3 | && typeof require === 'function' ? factory(require('../../moment')) : 4 | typeof define === 'function' && define.amd ? define(['../../moment'], factory) : 5 | factory(global.moment) 6 | }(this, function (moment) { 'use strict'; 7 | -------------------------------------------------------------------------------- /themes/integral/templates/mailbox/_list.html: -------------------------------------------------------------------------------- 1 | {{$name := .name}} 2 | {{range .messages}} 3 |
4 |
{{.Subject}}
5 |
{{.From}}
6 |
{{friendlyTime .Date}}
7 |
8 | {{else}} 9 |
10 |

No messages!

11 |
12 | {{end}} 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/clipboard/package.js: -------------------------------------------------------------------------------- 1 | // Package metadata for Meteor.js. 2 | 3 | Package.describe({ 4 | name: "zenorocha:clipboard", 5 | summary: "Modern copy to clipboard. No Flash. Just 2kb.", 6 | version: "1.5.9", 7 | git: "https://github.com/zenorocha/clipboard.js" 8 | }); 9 | 10 | Package.onUse(function(api) { 11 | api.addFiles("dist/clipboard.js", "client"); 12 | }); 13 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/zero-fill.js: -------------------------------------------------------------------------------- 1 | export default function zeroFill(number, targetLength, forceSign) { 2 | var absNumber = '' + Math.abs(number), 3 | zerosToFill = targetLength - absNumber.length, 4 | sign = number >= 0; 5 | return (sign ? (forceSign ? '+' : '') : '-') + 6 | Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; 7 | } 8 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/hooks.js: -------------------------------------------------------------------------------- 1 | export { hooks, setHookCallback }; 2 | 3 | var hookCallback; 4 | 5 | function hooks () { 6 | return hookCallback.apply(null, arguments); 7 | } 8 | 9 | // This is done to register the method called with moment() 10 | // without creating circular dependencies. 11 | function setHookCallback (callback) { 12 | hookCallback = callback; 13 | } 14 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/data/swarminject.js: -------------------------------------------------------------------------------- 1 | // load testswarm agent 2 | (function() { 3 | var url = window.location.search; 4 | url = decodeURIComponent( url.slice( url.indexOf("swarmURL=") + 9 ) ); 5 | if ( !url || url.indexOf("http") !== 0 ) { 6 | return; 7 | } 8 | document.write(""); 9 | })(); 10 | -------------------------------------------------------------------------------- /.goxc.json: -------------------------------------------------------------------------------- 1 | { 2 | "ArtifactsDest": "target", 3 | "TasksExclude": [ 4 | "pkg-build" 5 | ], 6 | "Arch": "amd64", 7 | "Os": "darwin freebsd linux windows", 8 | "ResourcesInclude": "README*,LICENSE*,CHANGELOG*,inbucket.bat,etc,themes", 9 | "PackageVersion": "1.1.0", 10 | "ConfigVersion": "0.9", 11 | "BuildSettings": { 12 | "LdFlagsXVars": { 13 | "TimeNow": "main.BUILDDATE", 14 | "Version": "main.VERSION" 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/selector-sizzle.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "../external/sizzle/dist/sizzle" 4 | ], function( jQuery, Sizzle ) { 5 | 6 | jQuery.find = Sizzle; 7 | jQuery.expr = Sizzle.selectors; 8 | jQuery.expr[ ":" ] = jQuery.expr.pseudos; 9 | jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 10 | jQuery.text = Sizzle.getText; 11 | jQuery.isXMLDoc = Sizzle.isXML; 12 | jQuery.contains = Sizzle.contains; 13 | 14 | } ); 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/timezone.js: -------------------------------------------------------------------------------- 1 | import { addFormatToken } from '../format/format'; 2 | 3 | // FORMATTING 4 | 5 | addFormatToken('z', 0, 0, 'zoneAbbr'); 6 | addFormatToken('zz', 0, 0, 'zoneName'); 7 | 8 | // MOMENTS 9 | 10 | export function getZoneAbbr () { 11 | return this._isUTC ? 'UTC' : ''; 12 | } 13 | 14 | export function getZoneName () { 15 | return this._isUTC ? 'Coordinated Universal Time' : ''; 16 | } 17 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/data/var/acceptData.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | /** 4 | * Determines whether an object can have data 5 | */ 6 | return function( owner ) { 7 | 8 | // Accepts only: 9 | // - Node 10 | // - Node.ELEMENT_NODE 11 | // - Node.DOCUMENT_NODE 12 | // - Object 13 | // - Any 14 | /* jshint -W018 */ 15 | return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 16 | }; 17 | 18 | } ); 19 | -------------------------------------------------------------------------------- /httpd/rest.go: -------------------------------------------------------------------------------- 1 | package httpd 2 | 3 | import ( 4 | "encoding/json" 5 | "net/http" 6 | ) 7 | 8 | // RenderJSON sets the correct HTTP headers for JSON, then writes the specified 9 | // data (typically a struct) encoded in JSON 10 | func RenderJSON(w http.ResponseWriter, data interface{}) error { 11 | w.Header().Set("Content-Type", "application/json; charset=utf-8") 12 | w.Header().Set("Expires", "-1") 13 | enc := json.NewEncoder(w) 14 | return enc.Encode(data) 15 | } 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-sparkline", 3 | "version": "2.1.3", 4 | "homepage": "https://github.com/rkgrep/jquery.sparkline", 5 | "authors": [ 6 | "Gareth Watts " 7 | ], 8 | "main": "dist/jquery.sparkline.js", 9 | "license": "BSD 3", 10 | "ignore": [ 11 | "**/.*", 12 | "node_modules", 13 | "bower_components", 14 | "test", 15 | "tests" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/event/ajax.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../event" 4 | ], function( jQuery ) { 5 | 6 | // Attach a bunch of functions for handling common AJAX events 7 | jQuery.each( [ 8 | "ajaxStart", 9 | "ajaxStop", 10 | "ajaxComplete", 11 | "ajaxError", 12 | "ajaxSuccess", 13 | "ajaxSend" 14 | ], function( i, type ) { 15 | jQuery.fn[ type ] = function( fn ) { 16 | return this.on( type, fn ); 17 | }; 18 | } ); 19 | 20 | } ); 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/_evalUrl.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../ajax" 3 | ], function( jQuery ) { 4 | 5 | jQuery._evalUrl = function( url ) { 6 | return jQuery.ajax( { 7 | url: url, 8 | 9 | // Make this explicit, since user can override this through ajaxSetup (#11264) 10 | type: "GET", 11 | dataType: "script", 12 | async: false, 13 | global: false, 14 | "throws": true 15 | } ); 16 | }; 17 | 18 | return jQuery._evalUrl; 19 | 20 | } ); 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs. 2 | 3 | See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. 4 | 5 | Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. 6 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/extend.js: -------------------------------------------------------------------------------- 1 | import hasOwnProp from './has-own-prop'; 2 | 3 | export default function extend(a, b) { 4 | for (var i in b) { 5 | if (hasOwnProp(b, i)) { 6 | a[i] = b[i]; 7 | } 8 | } 9 | 10 | if (hasOwnProp(b, 'toString')) { 11 | a.toString = b.toString; 12 | } 13 | 14 | if (hasOwnProp(b, 'valueOf')) { 15 | a.valueOf = b.valueOf; 16 | } 17 | 18 | return a; 19 | } 20 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/isHidden.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | 5 | // css is assumed 6 | ], function( jQuery ) { 7 | 8 | return function( elem, el ) { 9 | 10 | // isHidden might be called from jQuery#filter function; 11 | // in that case, element will be second argument 12 | elem = el || elem; 13 | return jQuery.css( elem, "display" ) === "none" || 14 | !jQuery.contains( elem.ownerDocument, elem ); 15 | }; 16 | } ); 17 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/valid.js: -------------------------------------------------------------------------------- 1 | import { isValid as _isValid } from '../create/valid'; 2 | import extend from '../utils/extend'; 3 | import getParsingFlags from '../create/parsing-flags'; 4 | 5 | export function isValid () { 6 | return _isValid(this); 7 | } 8 | 9 | export function parsingFlags () { 10 | return extend({}, getParsingFlags(this)); 11 | } 12 | 13 | export function invalidAt () { 14 | return getParsingFlags(this).overflow; 15 | } 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table !important; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-color", 3 | "homepage": "https://github.com/jquery/jquery-color", 4 | "version": "2.1.2", 5 | "_release": "2.1.2", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "2.1.2", 9 | "commit": "9e5e04c1c4ee66427fbe04cfce8155b76748ca64" 10 | }, 11 | "_source": "git://github.com/jquery/jquery-color.git", 12 | "_target": "^2.1.2", 13 | "_originalSource": "jquery-color", 14 | "_direct": true 15 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/getStyles.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return function( elem ) { 3 | 4 | // Support: IE<=11+, Firefox<=30+ (#15098, #14150) 5 | // IE throws on elements created in popups 6 | // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 7 | var view = elem.ownerDocument.defaultView; 8 | 9 | if ( !view || !view.opener ) { 10 | view = window; 11 | } 12 | 13 | return view.getComputedStyle( elem ); 14 | }; 15 | } ); 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "moment", 3 | "main": "moment.js", 4 | "ignore": [ 5 | "**/.*", 6 | "benchmarks", 7 | "bower_components", 8 | "meteor", 9 | "node_modules", 10 | "scripts", 11 | "tasks", 12 | "test", 13 | "component.json", 14 | "composer.json", 15 | "CONTRIBUTING.md", 16 | "ender.js", 17 | "Gruntfile.js", 18 | "Moment.js.nuspec", 19 | "package.js", 20 | "package.json" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/clipboard/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clipboard", 3 | "version": "1.5.9", 4 | "description": "Modern copy to clipboard. No Flash. Just 2kb", 5 | "license": "MIT", 6 | "main": "dist/clipboard.js", 7 | "ignore": [ 8 | "/.*/", 9 | "/demo/", 10 | "/test/", 11 | "/.*", 12 | "/bower.json", 13 | "/karma.conf.js", 14 | "/src", 15 | "/lib" 16 | ], 17 | "keywords": [ 18 | "clipboard", 19 | "copy", 20 | "cut" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/traversing/var/dir.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | 5 | return function( elem, dir, until ) { 6 | var matched = [], 7 | truncate = until !== undefined; 8 | 9 | while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 10 | if ( elem.nodeType === 1 ) { 11 | if ( truncate && jQuery( elem ).is( until ) ) { 12 | break; 13 | } 14 | matched.push( elem ); 15 | } 16 | } 17 | return matched; 18 | }; 19 | 20 | } ); 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/createSafeFragment.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./var/nodeNames" 3 | ], function( nodeNames ) { 4 | 5 | function createSafeFragment( document ) { 6 | var list = nodeNames.split( "|" ), 7 | safeFrag = document.createDocumentFragment(); 8 | 9 | if ( safeFrag.createElement ) { 10 | while ( list.length ) { 11 | safeFrag.createElement( 12 | list.pop() 13 | ); 14 | } 15 | } 16 | return safeFrag; 17 | } 18 | 19 | return createSafeFragment; 20 | } ); 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/data/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | ( function() { 7 | var div = document.createElement( "div" ); 8 | 9 | // Support: IE<9 10 | support.deleteExpando = true; 11 | try { 12 | delete div.test; 13 | } catch ( e ) { 14 | support.deleteExpando = false; 15 | } 16 | 17 | // Null elements to avoid leaks in IE. 18 | div = null; 19 | } )(); 20 | 21 | return support; 22 | 23 | } ); 24 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/setGlobalEval.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../data/var/dataPriv" 3 | ], function( dataPriv ) { 4 | 5 | // Mark scripts as having already been evaluated 6 | function setGlobalEval( elems, refElements ) { 7 | var i = 0, 8 | l = elems.length; 9 | 10 | for ( ; i < l; i++ ) { 11 | dataPriv.set( 12 | elems[ i ], 13 | "globalEval", 14 | !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 15 | ); 16 | } 17 | } 18 | 19 | return setGlobalEval; 20 | } ); 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 2 | *.o 3 | *.a 4 | *.so 5 | 6 | # Folders 7 | _obj 8 | _test 9 | 10 | # Architecture specific extensions/prefixes 11 | *.[568vq] 12 | [568vq].out 13 | 14 | *.cgo1.go 15 | *.cgo2.c 16 | _cgo_defun.c 17 | _cgo_gotypes.go 18 | _cgo_export.* 19 | 20 | _testmain.go 21 | 22 | *.exe 23 | 24 | # vim swp files 25 | *.swp 26 | *.swo 27 | 28 | # our binary 29 | /inbucket 30 | /inbucket.exe 31 | /target/** 32 | 33 | # local goxc config 34 | .goxc.local.json 35 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/data/accepts.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | /** 6 | * Determines whether an object can have data 7 | */ 8 | jQuery.acceptData = function( owner ) { 9 | // Accepts only: 10 | // - Node 11 | // - Node.ELEMENT_NODE 12 | // - Node.DOCUMENT_NODE 13 | // - Object 14 | // - Any 15 | /* jshint -W018 */ 16 | return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 17 | }; 18 | 19 | return jQuery.acceptData; 20 | }); 21 | -------------------------------------------------------------------------------- /themes/greeting.html: -------------------------------------------------------------------------------- 1 |

Inbucket is an email testing service; it will accept email for any email 2 | address and make it available to view without a password.

3 | 4 |

To view email for a particular address, enter the username portion 5 | of the address into the box on the upper right and click View.

6 | 7 |

This message can be customized by editing greeting.html. Change the 8 | configuration option greeting.file if you'd like to move it 9 | outside of the Inbucket installation directory.

10 | -------------------------------------------------------------------------------- /etc/redhat-el6/httpd-vhost.conf: -------------------------------------------------------------------------------- 1 | # Inbucket reverse proxy, Apache will forward requests from port 80 2 | # to Inbucket's built in web server on port 9000 3 | # 4 | # Replace SERVERFQDN with your servers fully qualified domain name 5 | 6 | ServerName SERVERFQDN 7 | ProxyRequests off 8 | 9 | 10 | Order allow,deny 11 | Allow from all 12 | 13 | 14 | RewriteRule ^/$ http://SERVERFQDN:9000 15 | ProxyPass / http://SERVERFQDN:9000/ 16 | ProxyPassReverse / http://SERVERFQDN:9000/ 17 | 18 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | $nuget = $env:NuGet 2 | 3 | #parse the version number out of package.json 4 | $bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version 5 | 6 | #create packages 7 | & $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 8 | & $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/calendar.js: -------------------------------------------------------------------------------- 1 | export var defaultCalendar = { 2 | sameDay : '[Today at] LT', 3 | nextDay : '[Tomorrow at] LT', 4 | nextWeek : 'dddd [at] LT', 5 | lastDay : '[Yesterday at] LT', 6 | lastWeek : '[Last] dddd [at] LT', 7 | sameElse : 'L' 8 | }; 9 | 10 | import isFunction from '../utils/is-function'; 11 | 12 | export function calendar (key, mom, now) { 13 | var output = this._calendar[key]; 14 | return isFunction(output) ? output.call(mom, now) : output; 15 | } 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/units.js: -------------------------------------------------------------------------------- 1 | // Side effect imports 2 | import './day-of-month'; 3 | import './day-of-week'; 4 | import './day-of-year'; 5 | import './hour'; 6 | import './millisecond'; 7 | import './minute'; 8 | import './month'; 9 | import './offset'; 10 | import './quarter'; 11 | import './second'; 12 | import './timestamp'; 13 | import './timezone'; 14 | import './week-year'; 15 | import './week'; 16 | import './year'; 17 | 18 | import { normalizeUnits } from './aliases'; 19 | 20 | export { normalizeUnits }; 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/en.js: -------------------------------------------------------------------------------- 1 | import './prototype'; 2 | import { getSetGlobalLocale } from './locales'; 3 | import toInt from '../utils/to-int'; 4 | 5 | getSetGlobalLocale('en', { 6 | ordinalParse: /\d{1,2}(th|st|nd|rd)/, 7 | ordinal : function (number) { 8 | var b = number % 10, 9 | output = (toInt(number % 100 / 10) === 1) ? 'th' : 10 | (b === 1) ? 'st' : 11 | (b === 2) ? 'nd' : 12 | (b === 3) ? 'rd' : 'th'; 13 | return number + output; 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/AUTHORS.TXT: -------------------------------------------------------------------------------- 1 | Authors ordered by first contribution 2 | 3 | John Resig 4 | Scott González 5 | Corey Frang 6 | eddiemonge 7 | Krinkle 8 | Richard D. Worth 9 | Jörn Zaefferer 10 | Mike Sherov 11 | Brendan Byrd 12 | Christoffer Sawicki 13 | Dmitry 14 | Ben Olson 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/.csslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "adjoining-classes": false, 3 | "box-sizing": false, 4 | "box-model": false, 5 | "compatible-vendor-prefixes": false, 6 | "floats": false, 7 | "font-sizes": false, 8 | "gradients": false, 9 | "important": false, 10 | "known-properties": false, 11 | "outline-none": false, 12 | "qualified-headings": false, 13 | "regex-selectors": false, 14 | "shorthand": false, 15 | "text-indent": false, 16 | "unique-headings": false, 17 | "universal-selector": false, 18 | "unqualified-attributes": false 19 | } 20 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/unit/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": true, 3 | "browser": true, 4 | "curly": true, 5 | "eqnull": true, 6 | "eqeqeq": true, 7 | "expr": true, 8 | "jquery": true, 9 | "latedef": true, 10 | "noarg": true, 11 | "onevar": true, 12 | "quotmark": "double", 13 | "trailing": true, 14 | "undef": true, 15 | "unused": true, 16 | "predef": [ 17 | "asyncTest", 18 | "deepEqual", 19 | "equal", 20 | "expect", 21 | "module", 22 | "notEqual", 23 | "ok", 24 | "start", 25 | "stop", 26 | "strictEqual", 27 | "test" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | *.raw -text 4 | 5 | # Custom for Visual Studio 6 | *.cs diff=csharp 7 | *.sln merge=union 8 | *.csproj merge=union 9 | *.vbproj merge=union 10 | *.fsproj merge=union 11 | *.dbproj merge=union 12 | 13 | # Standard to msysgit 14 | *.doc diff=astextplain 15 | *.DOC diff=astextplain 16 | *.docx diff=astextplain 17 | *.DOCX diff=astextplain 18 | *.dot diff=astextplain 19 | *.DOT diff=astextplain 20 | *.pdf diff=astextplain 21 | *.PDF diff=astextplain 22 | *.rtf diff=astextplain 23 | *.RTF diff=astextplain 24 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/from-object.js: -------------------------------------------------------------------------------- 1 | import { normalizeObjectUnits } from '../units/aliases'; 2 | import { configFromArray } from './from-array'; 3 | import map from '../utils/map'; 4 | 5 | export function configFromObject(config) { 6 | if (config._d) { 7 | return; 8 | } 9 | 10 | var i = normalizeObjectUnits(config._i); 11 | config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { 12 | return obj && parseInt(obj, 10); 13 | }); 14 | 15 | configFromArray(config); 16 | } 17 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/reset-text.less: -------------------------------------------------------------------------------- 1 | .reset-text() { 2 | font-family: @font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: @line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/set.js: -------------------------------------------------------------------------------- 1 | import isFunction from '../utils/is-function'; 2 | 3 | export function set (config) { 4 | var prop, i; 5 | for (i in config) { 6 | prop = config[i]; 7 | if (isFunction(prop)) { 8 | this[i] = prop; 9 | } else { 10 | this['_' + i] = prop; 11 | } 12 | } 13 | // Lenient ordinal parsing accepts just a number in addition to 14 | // number + (possibly) stuff coming from _ordinalParseLenient. 15 | this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); 16 | } 17 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/jquery.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | var parts = document.location.search.slice( 1 ).split( "&" ), 4 | length = parts.length, 5 | i = 0, 6 | current, 7 | version, 8 | url; 9 | 10 | for ( ; i < length; i++ ) { 11 | current = parts[ i ].split( "=" ); 12 | if ( current[ 0 ] === "jquery" ) { 13 | version = current[ 1 ]; 14 | break; 15 | } 16 | } 17 | 18 | if ( version === "git" ) { 19 | url = "http://code.jquery.com/jquery-git.js"; 20 | } else { 21 | url = "jquery-" + ( version || "1.7.2" ) + ".js"; 22 | } 23 | 24 | document.write( "" ); 25 | 26 | }() ); 27 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": true, 3 | "curly": true, 4 | "eqeqeq": true, 5 | "eqnull": true, 6 | "expr": true, 7 | "immed": true, 8 | "noarg": true, 9 | "quotmark": "double", 10 | "undef": true, 11 | "unused": true, 12 | 13 | "sub": true, 14 | 15 | // Support: IE < 10, Android < 4.1 16 | // The above browsers are failing a lot of tests in the ES5 17 | // test suite at http://test262.ecmascript.org. 18 | "es3": true, 19 | 20 | "globals": { 21 | "window": true, 22 | "JSON": false, 23 | 24 | "jQuery": true, 25 | "define": true, 26 | "module": true, 27 | "noGlobal": true 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | line-height: @line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | .border-left-radius(@border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | .border-right-radius(@border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/parseXML.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Cross-browser xml parsing 6 | jQuery.parseXML = function( data ) { 7 | var xml; 8 | if ( !data || typeof data !== "string" ) { 9 | return null; 10 | } 11 | 12 | // Support: IE9 13 | try { 14 | xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 15 | } catch ( e ) { 16 | xml = undefined; 17 | } 18 | 19 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 20 | jQuery.error( "Invalid XML: " + data ); 21 | } 22 | return xml; 23 | }; 24 | 25 | return jQuery.parseXML; 26 | 27 | } ); 28 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/var/swap.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // A method for quickly swapping in/out CSS properties to get correct calculations. 4 | return function( elem, options, callback, args ) { 5 | var ret, name, 6 | old = {}; 7 | 8 | // Remember the old values, and insert the new ones 9 | for ( name in options ) { 10 | old[ name ] = elem.style[ name ]; 11 | elem.style[ name ] = options[ name ]; 12 | } 13 | 14 | ret = callback.apply( elem, args || [] ); 15 | 16 | // Revert the old values 17 | for ( name in options ) { 18 | elem.style[ name ] = old[ name ]; 19 | } 20 | 21 | return ret; 22 | }; 23 | 24 | } ); 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/compare-arrays.js: -------------------------------------------------------------------------------- 1 | import toInt from './to-int'; 2 | 3 | // compare two arrays, return the number of differences 4 | export default function compareArrays(array1, array2, dontConvert) { 5 | var len = Math.min(array1.length, array2.length), 6 | lengthDiff = Math.abs(array1.length - array2.length), 7 | diffs = 0, 8 | i; 9 | for (i = 0; i < len; i++) { 10 | if ((dontConvert && array1[i] !== array2[i]) || 11 | (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { 12 | diffs++; 13 | } 14 | } 15 | return diffs + lengthDiff; 16 | } 17 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/hiddenVisibleSelectors.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../selector" 4 | ], function( jQuery ) { 5 | 6 | jQuery.expr.filters.hidden = function( elem ) { 7 | return !jQuery.expr.filters.visible( elem ); 8 | }; 9 | jQuery.expr.filters.visible = function( elem ) { 10 | 11 | // Support: Opera <= 12.12 12 | // Opera reports offsetWidths and offsetHeights less than zero on some elements 13 | // Use OR instead of AND as the element is not visible if either is true 14 | // See tickets #10406 and #13132 15 | return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; 16 | }; 17 | 18 | } ); 19 | -------------------------------------------------------------------------------- /etc/docker/defaults/start-inbucket.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # start-inbucket.sh 3 | # description: start inbucket (runs within a docker container) 4 | 5 | CONF_SOURCE="$INBUCKET_HOME/defaults" 6 | CONF_TARGET="/con/configuration" 7 | 8 | set -eo pipefail 9 | 10 | install_default_config() { 11 | local file="$1" 12 | local source="$CONF_SOURCE/$file" 13 | local target="$CONF_TARGET/$file" 14 | 15 | if [ ! -e "$target" ]; then 16 | echo "Installing default $file to $CONF_TARGET" 17 | install "$source" "$target" 18 | fi 19 | } 20 | 21 | install_default_config "inbucket.conf" 22 | install_default_config "greeting.html" 23 | 24 | exec "$INBUCKET_HOME/bin/inbucket" $* 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "2.2.1", 16 | "_release": "2.2.1", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "2.2.1", 20 | "commit": "788eaba2f83e7b7445c7a83a50c81c0704423874" 21 | }, 22 | "_source": "git://github.com/jquery/jquery-dist.git", 23 | "_target": "2", 24 | "_originalSource": "jquery" 25 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/addGetHookIf.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | function addGetHookIf( conditionFn, hookFn ) { 4 | 5 | // Define the hook, we'll check on the first run if it's really needed. 6 | return { 7 | get: function() { 8 | if ( conditionFn() ) { 9 | 10 | // Hook not needed (or it's not possible to use it due 11 | // to missing dependency), remove it. 12 | delete this.get; 13 | return; 14 | } 15 | 16 | // Hook needed; redefine it so that the support test is not executed again. 17 | return ( this.get = hookFn ).apply( this, arguments ); 18 | } 19 | }; 20 | } 21 | 22 | return addGetHookIf; 23 | 24 | } ); 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/duration/abs.js: -------------------------------------------------------------------------------- 1 | var mathAbs = Math.abs; 2 | 3 | export function abs () { 4 | var data = this._data; 5 | 6 | this._milliseconds = mathAbs(this._milliseconds); 7 | this._days = mathAbs(this._days); 8 | this._months = mathAbs(this._months); 9 | 10 | data.milliseconds = mathAbs(data.milliseconds); 11 | data.seconds = mathAbs(data.seconds); 12 | data.minutes = mathAbs(data.minutes); 13 | data.hours = mathAbs(data.hours); 14 | data.months = mathAbs(data.months); 15 | data.years = mathAbs(data.years); 16 | 17 | return this; 18 | } 19 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/README.md: -------------------------------------------------------------------------------- 1 | jQuery Sparklines 2 | ================= 3 | 4 | This jQuery plugin makes it easy to generate a number of different types 5 | of sparklines directly in the browser, using online a line of two of HTML 6 | and Javascript. 7 | 8 | The plugin has no dependencies other than jQuery and works with all modern 9 | browsers and also Internet Explorer 6 and later (excanvas is not required 10 | for IE support). 11 | 12 | See the [jQuery Sparkline project page](http://omnipotent.net/jquery.sparkline/) 13 | for live examples and documentation. 14 | 15 | ## License 16 | 17 | Released under the New BSD License 18 | 19 | (c) Splunk, Inc 2012 20 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/getAll.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | function getAll( context, tag ) { 6 | 7 | // Support: IE9-11+ 8 | // Use typeof to avoid zero-argument method invocation on host objects (#15151) 9 | var ret = typeof context.getElementsByTagName !== "undefined" ? 10 | context.getElementsByTagName( tag || "*" ) : 11 | typeof context.querySelectorAll !== "undefined" ? 12 | context.querySelectorAll( tag || "*" ) : 13 | []; 14 | 15 | return tag === undefined || tag && jQuery.nodeName( context, tag ) ? 16 | jQuery.merge( [ context ], ret ) : 17 | ret; 18 | } 19 | 20 | return getAll; 21 | } ); 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/exports/global.js: -------------------------------------------------------------------------------- 1 | var 2 | 3 | // Map over jQuery in case of overwrite 4 | _jQuery = window.jQuery, 5 | 6 | // Map over the $ in case of overwrite 7 | _$ = window.$; 8 | 9 | jQuery.noConflict = function( deep ) { 10 | if ( window.$ === jQuery ) { 11 | window.$ = _$; 12 | } 13 | 14 | if ( deep && window.jQuery === jQuery ) { 15 | window.jQuery = _jQuery; 16 | } 17 | 18 | return jQuery; 19 | }; 20 | 21 | // Expose jQuery and $ identifiers, even in AMD 22 | // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 23 | // and CommonJS for browser emulators (#13566) 24 | if ( !noGlobal ) { 25 | window.jQuery = window.$ = jQuery; 26 | } 27 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/parsing-flags.js: -------------------------------------------------------------------------------- 1 | function defaultParsingFlags() { 2 | // We need to deep clone this object. 3 | return { 4 | empty : false, 5 | unusedTokens : [], 6 | unusedInput : [], 7 | overflow : -2, 8 | charsLeftOver : 0, 9 | nullInput : false, 10 | invalidMonth : null, 11 | invalidFormat : false, 12 | userInvalidated : false, 13 | iso : false 14 | }; 15 | } 16 | 17 | export default function getParsingFlags(m) { 18 | if (m._pf == null) { 19 | m._pf = defaultParsingFlags(); 20 | } 21 | return m._pf; 22 | } 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/to.js: -------------------------------------------------------------------------------- 1 | import { createDuration } from '../duration/create'; 2 | import { createLocal } from '../create/local'; 3 | import { isMoment } from '../moment/constructor'; 4 | 5 | export function to (time, withoutSuffix) { 6 | if (this.isValid() && 7 | ((isMoment(time) && time.isValid()) || 8 | createLocal(time).isValid())) { 9 | return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); 10 | } else { 11 | return this.localeData().invalidDate(); 12 | } 13 | } 14 | 15 | export function toNow (withoutSuffix) { 16 | return this.to(createLocal(), withoutSuffix); 17 | } 18 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/from.js: -------------------------------------------------------------------------------- 1 | import { createDuration } from '../duration/create'; 2 | import { createLocal } from '../create/local'; 3 | import { isMoment } from '../moment/constructor'; 4 | 5 | export function from (time, withoutSuffix) { 6 | if (this.isValid() && 7 | ((isMoment(time) && time.isValid()) || 8 | createLocal(time).isValid())) { 9 | return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); 10 | } else { 11 | return this.localeData().invalidDate(); 12 | } 13 | } 14 | 15 | export function fromNow (withoutSuffix) { 16 | return this.from(createLocal(), withoutSuffix); 17 | } 18 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (has been removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inbucket-bootstrap", 3 | "homepage": "http://www.inbucket.org/", 4 | "authors": [ 5 | "James Hillyerd " 6 | ], 7 | "description": "Bootstrap theme for Inbucket", 8 | "main": [], 9 | "moduleType": [ 10 | "globals" 11 | ], 12 | "license": "MIT", 13 | "ignore": [ 14 | "**/.*", 15 | "node_modules", 16 | "bower_components", 17 | "test", 18 | "tests" 19 | ], 20 | "dependencies": { 21 | "bootstrap": "3.3", 22 | "jquery": "2", 23 | "jquery-color": "^2.1.2", 24 | "jquery-sparkline": "^2.1.3", 25 | "clipboard": "^1.5.9", 26 | "jquery-load-template": "^1.5.6", 27 | "moment": "^2.11.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/core/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | // Support: Safari 8+ 7 | // In Safari 8 documents created via document.implementation.createHTMLDocument 8 | // collapse sibling forms: the second one becomes a child of the first one. 9 | // Because of that, this security measure has to be disabled in Safari 8. 10 | // https://bugs.webkit.org/show_bug.cgi?id=137337 11 | support.createHTMLDocument = ( function() { 12 | var body = document.implementation.createHTMLDocument( "" ).body; 13 | body.innerHTML = "
"; 14 | return body.childNodes.length === 2; 15 | } )(); 16 | 17 | return support; 18 | } ); 19 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/timestamp.js: -------------------------------------------------------------------------------- 1 | import { addFormatToken } from '../format/format'; 2 | import { addRegexToken, matchTimestamp, matchSigned } from '../parse/regex'; 3 | import { addParseToken } from '../parse/token'; 4 | import toInt from '../utils/to-int'; 5 | 6 | // FORMATTING 7 | 8 | addFormatToken('X', 0, 0, 'unix'); 9 | addFormatToken('x', 0, 0, 'valueOf'); 10 | 11 | // PARSING 12 | 13 | addRegexToken('x', matchSigned); 14 | addRegexToken('X', matchTimestamp); 15 | addParseToken('X', function (input, array, config) { 16 | config._d = new Date(parseFloat(input, 10) * 1000); 17 | }); 18 | addParseToken('x', function (input, array, config) { 19 | config._d = new Date(toInt(input)); 20 | }); 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a&, 9 | button& { 10 | color: @color; 11 | 12 | .list-group-item-heading { 13 | color: inherit; 14 | } 15 | 16 | &:hover, 17 | &:focus { 18 | color: @color; 19 | background-color: darken(@background, 5%); 20 | } 21 | &.active, 22 | &.active:hover, 23 | &.active:focus { 24 | color: #fff; 25 | background-color: @color; 26 | border-color: @color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/deferred/exceptionHook.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../deferred" 4 | ], function( jQuery ) { 5 | 6 | // These usually indicate a programmer mistake during development, 7 | // warn about them ASAP rather than swallowing them by default. 8 | var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 9 | 10 | jQuery.Deferred.exceptionHook = function( error, stack ) { 11 | 12 | // Support: IE9 13 | // Console exists when dev tools are open, which can happen at any time 14 | if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 15 | window.console.warn( "jQuery.Deferred exception: " + error.message, stack ); 16 | } 17 | }; 18 | 19 | } ); 20 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/formats.js: -------------------------------------------------------------------------------- 1 | export var defaultLongDateFormat = { 2 | LTS : 'h:mm:ss A', 3 | LT : 'h:mm A', 4 | L : 'MM/DD/YYYY', 5 | LL : 'MMMM D, YYYY', 6 | LLL : 'MMMM D, YYYY h:mm A', 7 | LLLL : 'dddd, MMMM D, YYYY h:mm A' 8 | }; 9 | 10 | export function longDateFormat (key) { 11 | var format = this._longDateFormat[key], 12 | formatUpper = this._longDateFormat[key.toUpperCase()]; 13 | 14 | if (format || !formatUpper) { 15 | return format; 16 | } 17 | 18 | this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { 19 | return val.slice(1); 20 | }); 21 | 22 | return this._longDateFormat[key]; 23 | } 24 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/minute.js: -------------------------------------------------------------------------------- 1 | import { makeGetSet } from '../moment/get-set'; 2 | import { addFormatToken } from '../format/format'; 3 | import { addUnitAlias } from './aliases'; 4 | import { addRegexToken, match1to2, match2 } from '../parse/regex'; 5 | import { addParseToken } from '../parse/token'; 6 | import { MINUTE } from './constants'; 7 | 8 | // FORMATTING 9 | 10 | addFormatToken('m', ['mm', 2], 0, 'minute'); 11 | 12 | // ALIASES 13 | 14 | addUnitAlias('minute', 'm'); 15 | 16 | // PARSING 17 | 18 | addRegexToken('m', match1to2); 19 | addRegexToken('mm', match1to2, match2); 20 | addParseToken(['m', 'mm'], MINUTE); 21 | 22 | // MOMENTS 23 | 24 | export var getSetMinute = makeGetSet('Minutes', false); 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/second.js: -------------------------------------------------------------------------------- 1 | import { makeGetSet } from '../moment/get-set'; 2 | import { addFormatToken } from '../format/format'; 3 | import { addUnitAlias } from './aliases'; 4 | import { addRegexToken, match1to2, match2 } from '../parse/regex'; 5 | import { addParseToken } from '../parse/token'; 6 | import { SECOND } from './constants'; 7 | 8 | // FORMATTING 9 | 10 | addFormatToken('s', ['ss', 2], 0, 'second'); 11 | 12 | // ALIASES 13 | 14 | addUnitAlias('second', 's'); 15 | 16 | // PARSING 17 | 18 | addRegexToken('s', match1to2); 19 | addRegexToken('ss', match1to2, match2); 20 | addParseToken(['s', 'ss'], SECOND); 21 | 22 | // MOMENTS 23 | 24 | export var getSetSecond = makeGetSet('Seconds', false); 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/queue/delay.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../queue", 4 | "../effects" // Delay is optional because of this dependency 5 | ], function( jQuery ) { 6 | 7 | // Based off of the plugin by Clint Helfers, with permission. 8 | // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 9 | jQuery.fn.delay = function( time, type ) { 10 | time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 11 | type = type || "fx"; 12 | 13 | return this.queue( type, function( next, hooks ) { 14 | var timeout = window.setTimeout( next, time ); 15 | hooks.stop = function() { 16 | window.clearTimeout( timeout ); 17 | }; 18 | } ); 19 | }; 20 | 21 | return jQuery.fn.delay; 22 | } ); 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /swaks-tests/mime-html.raw: -------------------------------------------------------------------------------- 1 | Date: %DATE% 2 | To: %TO_ADDRESS% 3 | From: %FROM_ADDRESS% 4 | Subject: Swaks HTML 5 | MIME-Version: 1.0 6 | Content-Type: multipart/alternative; boundary="----=_MIME_BOUNDARY_000_62717" 7 | 8 | ------=_MIME_BOUNDARY_000_62717 9 | Content-Type: text/plain 10 | 11 | This is a test mailing. 12 | 13 | This should be clickable: http://google.com/ 14 | 15 | ------=_MIME_BOUNDARY_000_62717 16 | Content-Type: text/html 17 | Content-Transfer-Encoding: BASE64 18 | 19 | PGh0bWw+Cjxib2R5Pgo8cD5UaGlzIGlzIGEgdGVzdCBtYWlsaW5nIDxiPmluIEhUTUw8L2I+PC9w 20 | PgoKPHA+VGhpcyBzaG91bGQgYmUgY2xpY2thYmxlOiA8YSBocmVmPSJodHRwOi8vZ29vZ2xlLmNv 21 | bS8iPmdvb2dsZS5jb208L2E+PC9wPgo8L2JvZHk+CjwvaHRtbD4K 22 | 23 | ------=_MIME_BOUNDARY_000_62717-- 24 | 25 | 26 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/moment.js: -------------------------------------------------------------------------------- 1 | import { createLocal } from '../create/local'; 2 | import { createUTC } from '../create/utc'; 3 | import { createInvalid } from '../create/valid'; 4 | import { isMoment } from './constructor'; 5 | import { min, max } from './min-max'; 6 | import { now } from './now'; 7 | import momentPrototype from './prototype'; 8 | 9 | function createUnix (input) { 10 | return createLocal(input * 1000); 11 | } 12 | 13 | function createInZone () { 14 | return createLocal.apply(null, arguments).parseZone(); 15 | } 16 | 17 | export { 18 | now, 19 | min, 20 | max, 21 | isMoment, 22 | createUTC, 23 | createUnix, 24 | createLocal, 25 | createInZone, 26 | createInvalid, 27 | momentPrototype 28 | }; 29 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-sparkline", 3 | "version": "2.1.3", 4 | "homepage": "https://github.com/rkgrep/jquery.sparkline", 5 | "authors": [ 6 | "Gareth Watts " 7 | ], 8 | "main": "dist/jquery.sparkline.js", 9 | "license": "BSD 3", 10 | "ignore": [ 11 | "**/.*", 12 | "node_modules", 13 | "bower_components", 14 | "test", 15 | "tests" 16 | ], 17 | "_release": "2.1.3", 18 | "_resolution": { 19 | "type": "version", 20 | "tag": "v2.1.3", 21 | "commit": "47b1f5a7daaa45739a75f8fd1d7c2948693d66fd" 22 | }, 23 | "_source": "git://github.com/rkgrep/jquery.sparkline.git", 24 | "_target": "^2.1.3", 25 | "_originalSource": "jquery-sparkline", 26 | "_direct": true 27 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/duration/add-subtract.js: -------------------------------------------------------------------------------- 1 | import { createDuration } from './create'; 2 | 3 | function addSubtract (duration, input, value, direction) { 4 | var other = createDuration(input, value); 5 | 6 | duration._milliseconds += direction * other._milliseconds; 7 | duration._days += direction * other._days; 8 | duration._months += direction * other._months; 9 | 10 | return duration._bubble(); 11 | } 12 | 13 | // supports only 2.0-style add(1, 's') or add(duration) 14 | export function add (input, value) { 15 | return addSubtract(this, input, value, 1); 16 | } 17 | 18 | // supports only 2.0-style subtract(1, 's') or subtract(duration) 19 | export function subtract (input, value) { 20 | return addSubtract(this, input, value, -1); 21 | } 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/jquery.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./selector", 4 | "./traversing", 5 | "./callbacks", 6 | "./deferred", 7 | "./core/ready", 8 | "./data", 9 | "./queue", 10 | "./queue/delay", 11 | "./attributes", 12 | "./event", 13 | "./event/alias", 14 | "./event/focusin", 15 | "./manipulation", 16 | "./manipulation/_evalUrl", 17 | "./wrap", 18 | "./css", 19 | "./css/hiddenVisibleSelectors", 20 | "./serialize", 21 | "./ajax", 22 | "./ajax/xhr", 23 | "./ajax/script", 24 | "./ajax/jsonp", 25 | "./ajax/load", 26 | "./event/ajax", 27 | "./effects", 28 | "./effects/animatedSelector", 29 | "./offset", 30 | "./dimensions", 31 | "./deprecated", 32 | "./exports/amd" 33 | ], function( jQuery ) { 34 | 35 | return ( window.jQuery = window.$ = jQuery ); 36 | 37 | } ); 38 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/event/alias.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | 4 | "../event", 5 | "./trigger" 6 | ], function( jQuery ) { 7 | 8 | jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + 9 | "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 10 | "change select submit keydown keypress keyup error contextmenu" ).split( " " ), 11 | function( i, name ) { 12 | 13 | // Handle event binding 14 | jQuery.fn[ name ] = function( data, fn ) { 15 | return arguments.length > 0 ? 16 | this.on( name, null, data, fn ) : 17 | this.trigger( name ); 18 | }; 19 | } ); 20 | 21 | jQuery.fn.extend( { 22 | hover: function( fnOver, fnOut ) { 23 | return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 24 | } 25 | } ); 26 | 27 | } ); 28 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/deprecated.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core" 3 | ], function( jQuery ) { 4 | 5 | jQuery.fn.extend( { 6 | 7 | bind: function( types, data, fn ) { 8 | return this.on( types, null, data, fn ); 9 | }, 10 | unbind: function( types, fn ) { 11 | return this.off( types, null, fn ); 12 | }, 13 | 14 | delegate: function( selector, types, data, fn ) { 15 | return this.on( types, selector, data, fn ); 16 | }, 17 | undelegate: function( selector, types, fn ) { 18 | 19 | // ( namespace ) or ( selector, types [, fn] ) 20 | return arguments.length === 1 ? 21 | this.off( selector, "**" ) : 22 | this.off( types, selector || "**", fn ); 23 | }, 24 | size: function() { 25 | return this.length; 26 | } 27 | } ); 28 | 29 | jQuery.fn.andSelf = jQuery.fn.addBack; 30 | 31 | } ); 32 | 33 | -------------------------------------------------------------------------------- /rest/routes.go: -------------------------------------------------------------------------------- 1 | package rest 2 | 3 | import "github.com/gorilla/mux" 4 | import "github.com/jhillyerd/inbucket/httpd" 5 | 6 | // SetupRoutes populates the routes for the REST interface 7 | func SetupRoutes(r *mux.Router) { 8 | // API v1 9 | r.Path("/api/v1/mailbox/{name}").Handler(httpd.Handler(MailboxListV1)).Name("MailboxListV1").Methods("GET") 10 | r.Path("/api/v1/mailbox/{name}").Handler(httpd.Handler(MailboxPurgeV1)).Name("MailboxPurgeV1").Methods("DELETE") 11 | r.Path("/api/v1/mailbox/{name}/{id}").Handler(httpd.Handler(MailboxShowV1)).Name("MailboxShowV1").Methods("GET") 12 | r.Path("/api/v1/mailbox/{name}/{id}").Handler(httpd.Handler(MailboxDeleteV1)).Name("MailboxDeleteV1").Methods("DELETE") 13 | r.Path("/api/v1/mailbox/{name}/{id}/source").Handler(httpd.Handler(MailboxSourceV1)).Name("MailboxSourceV1").Methods("GET") 14 | } 15 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jQuery-Color Test Suite 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |

jQuery-Color Test Suite

16 |

17 |
18 |

19 |
    20 | 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/quarter.js: -------------------------------------------------------------------------------- 1 | import { addFormatToken } from '../format/format'; 2 | import { addUnitAlias } from './aliases'; 3 | import { addRegexToken, match1 } from '../parse/regex'; 4 | import { addParseToken } from '../parse/token'; 5 | import { MONTH } from './constants'; 6 | import toInt from '../utils/to-int'; 7 | 8 | // FORMATTING 9 | 10 | addFormatToken('Q', 0, 'Qo', 'quarter'); 11 | 12 | // ALIASES 13 | 14 | addUnitAlias('quarter', 'Q'); 15 | 16 | // PARSING 17 | 18 | addRegexToken('Q', match1); 19 | addParseToken('Q', function (input, array) { 20 | array[MONTH] = (toInt(input) - 1) * 3; 21 | }); 22 | 23 | // MOMENTS 24 | 25 | export function getSetQuarter (input) { 26 | return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); 27 | } 28 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker build file for Inbucket, see https://www.docker.io/ 2 | # Inbucket website: http://www.inbucket.org/ 3 | 4 | FROM golang:1.6-alpine 5 | MAINTAINER James Hillyerd, @jameshillyerd 6 | 7 | # Configuration (WORKDIR doesn't support env vars) 8 | ENV INBUCKET_SRC $GOPATH/src/github.com/jhillyerd/inbucket 9 | ENV INBUCKET_HOME /opt/inbucket 10 | WORKDIR $INBUCKET_HOME 11 | ENTRYPOINT ["/con/context/start-inbucket.sh"] 12 | CMD ["/con/configuration/inbucket.conf"] 13 | 14 | # Ports: SMTP, HTTP, POP3 15 | EXPOSE 10025 10080 10110 16 | 17 | # Persistent Volumes, following convention at: 18 | # https://github.com/docker/docker/issues/9277 19 | # NOTE /con/context is also used, not exposed by default 20 | VOLUME /con/configuration 21 | VOLUME /con/data 22 | 23 | # Build Inbucket 24 | COPY . $INBUCKET_SRC/ 25 | RUN "$INBUCKET_SRC/etc/docker/install.sh" 26 | -------------------------------------------------------------------------------- /etc/docker/defaults/greeting.html: -------------------------------------------------------------------------------- 1 |

    Inbucket is an email testing service; it will accept email for any email 2 | address and make it available to view without a password.

    3 | 4 |

    To view email for a particular address, enter the username portion 5 | of the address into the box on the upper right and click View.

    6 | 7 |

    This instance of Inbucket is running inside of a Docker container. It is 9 | configured to retain messages for a maximum of 3 days, and will enforce a limit 10 | of 300 messages per mailbox - the oldest messages will be deleted to stay under 11 | that limit.

    12 | 13 |

    Messages addressed to any recipient in the @bitbucket.local 14 | domain will be accepted but not written to disk. Use this domain for load or 15 | soak testing your application.

    16 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/duration/get.js: -------------------------------------------------------------------------------- 1 | import { normalizeUnits } from '../units/aliases'; 2 | import absFloor from '../utils/abs-floor'; 3 | 4 | export function get (units) { 5 | units = normalizeUnits(units); 6 | return this[units + 's'](); 7 | } 8 | 9 | function makeGetter(name) { 10 | return function () { 11 | return this._data[name]; 12 | }; 13 | } 14 | 15 | export var milliseconds = makeGetter('milliseconds'); 16 | export var seconds = makeGetter('seconds'); 17 | export var minutes = makeGetter('minutes'); 18 | export var hours = makeGetter('hours'); 19 | export var days = makeGetter('days'); 20 | export var months = makeGetter('months'); 21 | export var years = makeGetter('years'); 22 | 23 | export function weeks () { 24 | return absFloor(this.days() / 7); 25 | } 26 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/date-from-array.js: -------------------------------------------------------------------------------- 1 | export function createDate (y, m, d, h, M, s, ms) { 2 | //can't just apply() to create a date: 3 | //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply 4 | var date = new Date(y, m, d, h, M, s, ms); 5 | 6 | //the date constructor remaps years 0-99 to 1900-1999 7 | if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { 8 | date.setFullYear(y); 9 | } 10 | return date; 11 | } 12 | 13 | export function createUTCDate (y) { 14 | var date = new Date(Date.UTC.apply(null, arguments)); 15 | 16 | //the Date.UTC function remaps years 0-99 to 1900-1999 17 | if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { 18 | date.setUTCFullYear(y); 19 | } 20 | return date; 21 | } 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/clipboard/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clipboard", 3 | "version": "1.5.9", 4 | "description": "Modern copy to clipboard. No Flash. Just 2kb", 5 | "license": "MIT", 6 | "main": "dist/clipboard.js", 7 | "ignore": [ 8 | "/.*/", 9 | "/demo/", 10 | "/test/", 11 | "/.*", 12 | "/bower.json", 13 | "/karma.conf.js", 14 | "/src", 15 | "/lib" 16 | ], 17 | "keywords": [ 18 | "clipboard", 19 | "copy", 20 | "cut" 21 | ], 22 | "homepage": "https://github.com/zenorocha/clipboard.js", 23 | "_release": "1.5.9", 24 | "_resolution": { 25 | "type": "version", 26 | "tag": "v1.5.9", 27 | "commit": "ff3cd2c722b744fa21d0fc621a08ad88b7a38189" 28 | }, 29 | "_source": "git://github.com/zenorocha/clipboard.js.git", 30 | "_target": "^1.5.9", 31 | "_originalSource": "clipboard", 32 | "_direct": true 33 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "moment", 3 | "main": "moment.js", 4 | "ignore": [ 5 | "**/.*", 6 | "benchmarks", 7 | "bower_components", 8 | "meteor", 9 | "node_modules", 10 | "scripts", 11 | "tasks", 12 | "test", 13 | "component.json", 14 | "composer.json", 15 | "CONTRIBUTING.md", 16 | "ender.js", 17 | "Gruntfile.js", 18 | "Moment.js.nuspec", 19 | "package.js", 20 | "package.json" 21 | ], 22 | "homepage": "https://github.com/moment/moment", 23 | "version": "2.11.2", 24 | "_release": "2.11.2", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "2.11.2", 28 | "commit": "c9afcbd8c4e0177d03b220a89ab19f62c6cc7bcf" 29 | }, 30 | "_source": "git://github.com/moment/moment.git", 31 | "_target": "^2.11.2", 32 | "_originalSource": "moment", 33 | "_direct": true 34 | } -------------------------------------------------------------------------------- /etc/ubuntu-12/inbucket-upstart.conf: -------------------------------------------------------------------------------- 1 | # inbucket - disposable email service 2 | # 3 | # Inbucket is an SMTP server with a web interface for testing application 4 | # functionality 5 | 6 | description "inbucket - disposable email service" 7 | author "http://jhillyerd.github.com/inbucket" 8 | 9 | start on (local-filesystems and net-device-up IFACE!=lo) 10 | stop on runlevel [!2345] 11 | 12 | env program=/opt/inbucket/inbucket 13 | env config=/etc/opt/inbucket.conf 14 | env logfile=/var/log/inbucket.log 15 | env runas=inbucket 16 | 17 | # Give SMTP connections time to drain 18 | kill timeout 20 19 | 20 | pre-start script 21 | [ -x $program ] 22 | [ -r $config ] 23 | touch $logfile 24 | chown $runas: $logfile 25 | # Allow bind to ports under 1024 26 | setcap 'cap_net_bind_service=+ep' $program 27 | end script 28 | 29 | exec start-stop-daemon --start --chuid $runas --exec $program -- -logfile $logfile $config 30 | -------------------------------------------------------------------------------- /log/stdout_unix.go: -------------------------------------------------------------------------------- 1 | // +build !windows 2 | 3 | package log 4 | 5 | import ( 6 | "golang.org/x/sys/unix" 7 | "os" 8 | ) 9 | 10 | // closeStdin will close stdin on Unix platforms - this is standard practice 11 | // for daemons 12 | func closeStdin() { 13 | if err := os.Stdin.Close(); err != nil { 14 | // Not a fatal error 15 | Errorf("Failed to close os.Stdin during log setup") 16 | } 17 | } 18 | 19 | // reassignStdout points stdout/stderr to our logfile on systems that support 20 | // the Dup2 syscall per https://github.com/golang/go/issues/325 21 | func reassignStdout() { 22 | Tracef("Unix reassignStdout()") 23 | if err := unix.Dup2(int(logf.Fd()), 1); err != nil { 24 | // Not considered fatal 25 | Errorf("Failed to re-assign stdout to logfile: %v", err) 26 | } 27 | if err := unix.Dup2(int(logf.Fd()), 2); err != nil { 28 | // Not considered fatal 29 | Errorf("Failed to re-assign stderr to logfile: %v", err) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/wrapMap.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // We have to close these tags to support XHTML (#13200) 4 | var wrapMap = { 5 | 6 | // Support: IE9 7 | option: [ 1, "" ], 8 | 9 | // XHTML parsers do not magically insert elements in the 10 | // same way that tag soup parsers do. So we cannot shorten 11 | // this by omitting or other required elements. 12 | thead: [ 1, "", "
    " ], 13 | col: [ 2, "", "
    " ], 14 | tr: [ 2, "", "
    " ], 15 | td: [ 3, "", "
    " ], 16 | 17 | _default: [ 0, "", "" ] 18 | }; 19 | 20 | // Support: IE9 21 | wrapMap.optgroup = wrapMap.option; 22 | 23 | wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 24 | wrapMap.th = wrapMap.td; 25 | 26 | return wrapMap; 27 | } ); 28 | -------------------------------------------------------------------------------- /swaks-tests/README.md: -------------------------------------------------------------------------------- 1 | swaks-tests 2 | =========== 3 | 4 | [Swaks](http://www.jetmore.org/john/code/swaks/) - Swiss Army Knife for SMTP 5 | 6 | Swaks gives us an easy way to generate mail to send into Inbucket. You will need to 7 | install Swaks before you can use the provided scripts. 8 | 9 | ## Usage 10 | 11 | To deliver a batch of test email to the `swaks` mailbox, assuming Inbucket SMTP is listening 12 | on localhost:2500: 13 | 14 | ./run-tests.sh 15 | 16 | To deliver a batch of test email to the `james` mailbox: 17 | 18 | ./run-tests.sh james 19 | 20 | You may also pass swaks options to deliver to a alternate host/port: 21 | 22 | ./run-tests --server inbucket.mydomain.com:25 23 | 24 | To specify the mailbox with an alternate server, use `--to` with a local and host part: 25 | 26 | ./run-tests --server inbucket.mydomain.com:25 --to james@mydomain.com 27 | 28 | ## To Do 29 | 30 | Replace Swaks with a native Go solution. 31 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/locale.js: -------------------------------------------------------------------------------- 1 | // Side effect imports 2 | import './prototype'; 3 | 4 | import { 5 | getSetGlobalLocale, 6 | defineLocale, 7 | getLocale 8 | } from './locales'; 9 | 10 | import { 11 | listMonths, 12 | listMonthsShort, 13 | listWeekdays, 14 | listWeekdaysShort, 15 | listWeekdaysMin 16 | } from './lists'; 17 | 18 | export { 19 | getSetGlobalLocale, 20 | defineLocale, 21 | getLocale, 22 | listMonths, 23 | listMonthsShort, 24 | listWeekdays, 25 | listWeekdaysShort, 26 | listWeekdaysMin 27 | }; 28 | 29 | import { deprecate } from '../utils/deprecate'; 30 | import { hooks } from '../utils/hooks'; 31 | 32 | hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); 33 | hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); 34 | 35 | import './en'; 36 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | button& { 28 | padding: 0; 29 | cursor: pointer; 30 | background: transparent; 31 | border: 0; 32 | -webkit-appearance: none; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(border .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/test/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    Test string
    11 | 12 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/aliases.js: -------------------------------------------------------------------------------- 1 | import hasOwnProp from '../utils/has-own-prop'; 2 | 3 | var aliases = {}; 4 | 5 | export function addUnitAlias (unit, shorthand) { 6 | var lowerCase = unit.toLowerCase(); 7 | aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; 8 | } 9 | 10 | export function normalizeUnits(units) { 11 | return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; 12 | } 13 | 14 | export function normalizeObjectUnits(inputObject) { 15 | var normalizedInput = {}, 16 | normalizedProp, 17 | prop; 18 | 19 | for (prop in inputObject) { 20 | if (hasOwnProp(inputObject, prop)) { 21 | normalizedProp = normalizeUnits(prop); 22 | if (normalizedProp) { 23 | normalizedInput[normalizedProp] = inputObject[prop]; 24 | } 25 | } 26 | } 27 | 28 | return normalizedInput; 29 | } 30 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/relative.js: -------------------------------------------------------------------------------- 1 | export var defaultRelativeTime = { 2 | future : 'in %s', 3 | past : '%s ago', 4 | s : 'a few seconds', 5 | m : 'a minute', 6 | mm : '%d minutes', 7 | h : 'an hour', 8 | hh : '%d hours', 9 | d : 'a day', 10 | dd : '%d days', 11 | M : 'a month', 12 | MM : '%d months', 13 | y : 'a year', 14 | yy : '%d years' 15 | }; 16 | 17 | import isFunction from '../utils/is-function'; 18 | 19 | export function relativeTime (number, withoutSuffix, string, isFuture) { 20 | var output = this._relativeTime[string]; 21 | return (isFunction(output)) ? 22 | output(number, withoutSuffix, string, isFuture) : 23 | output.replace(/%d/i, number); 24 | } 25 | 26 | export function pastFuture (diff, output) { 27 | var format = this._relativeTime[diff > 0 ? 'future' : 'past']; 28 | return isFunction(format) ? format(output) : format.replace(/%s/i, output); 29 | } 30 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/to-type.js: -------------------------------------------------------------------------------- 1 | export function valueOf () { 2 | return +this._d - ((this._offset || 0) * 60000); 3 | } 4 | 5 | export function unix () { 6 | return Math.floor(+this / 1000); 7 | } 8 | 9 | export function toDate () { 10 | return this._offset ? new Date(+this) : this._d; 11 | } 12 | 13 | export function toArray () { 14 | var m = this; 15 | return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; 16 | } 17 | 18 | export function toObject () { 19 | var m = this; 20 | return { 21 | years: m.year(), 22 | months: m.month(), 23 | date: m.date(), 24 | hours: m.hours(), 25 | minutes: m.minutes(), 26 | seconds: m.seconds(), 27 | milliseconds: m.milliseconds() 28 | }; 29 | } 30 | 31 | export function toJSON () { 32 | // JSON.stringify(new Date(NaN)) === 'null' 33 | return this.isValid() ? this.toISOString() : 'null'; 34 | } 35 | -------------------------------------------------------------------------------- /log/stdout_windows.go: -------------------------------------------------------------------------------- 1 | // +build windows 2 | 3 | package log 4 | 5 | import ( 6 | "os" 7 | ) 8 | 9 | var stdOutsClosed = false 10 | 11 | // closeStdin does nothing on Windows, it would always fail 12 | func closeStdin() { 13 | // Nop 14 | } 15 | 16 | // reassignStdout points stdout/stderr to our logfile on systems that do not 17 | // support the Dup2 syscall 18 | func reassignStdout() { 19 | Tracef("Windows reassignStdout()") 20 | if !stdOutsClosed { 21 | // Close std* streams to prevent accidental output, they will be redirected to 22 | // our logfile below 23 | 24 | // Warning: this will hide panic() output, sorry Windows users 25 | if err := os.Stderr.Close(); err != nil { 26 | // Not considered fatal 27 | Errorf("Failed to close os.Stderr during log setup") 28 | } 29 | if err := os.Stdin.Close(); err != nil { 30 | // Not considered fatal 31 | Errorf("Failed to close os.Stdin during log setup") 32 | } 33 | os.Stdout = logf 34 | os.Stderr = logf 35 | stdOutsClosed = true 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/color.jquery.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "color", 3 | "title": "jQuery Color", 4 | "description": "jQuery plugin for color manipulation and animation support.", 5 | "keywords": [ 6 | "color", 7 | "animation" 8 | ], 9 | "version": "2.1.2", 10 | "author": { 11 | "name": "jQuery Foundation and other contributors", 12 | "url": "https://github.com/jquery/jquery-color/blob/2.1.2/AUTHORS.txt" 13 | }, 14 | "maintainers": [ 15 | { 16 | "name": "Corey Frang", 17 | "email": "gnarf37@gmail.com", 18 | "url": "http://gnarf.net" 19 | } 20 | ], 21 | "licenses": [ 22 | { 23 | "type": "MIT", 24 | "url": "https://github.com/jquery/jquery-color/blob/2.1.2/MIT-LICENSE.txt" 25 | } 26 | ], 27 | "bugs": "https://github.com/jquery/jquery-color/issues", 28 | "homepage": "https://github.com/jquery/jquery-color", 29 | "docs": "https://github.com/jquery/jquery-color", 30 | "download": "http://code.jquery.com/#color", 31 | "dependencies": { 32 | "jquery": ">=1.5" 33 | } 34 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/calendar.js: -------------------------------------------------------------------------------- 1 | import { createLocal } from '../create/local'; 2 | import { cloneWithOffset } from '../units/offset'; 3 | import isFunction from '../utils/is-function'; 4 | 5 | export function calendar (time, formats) { 6 | // We want to compare the start of today, vs this. 7 | // Getting start-of-today depends on whether we're local/utc/offset or not. 8 | var now = time || createLocal(), 9 | sod = cloneWithOffset(now, this).startOf('day'), 10 | diff = this.diff(sod, 'days', true), 11 | format = diff < -6 ? 'sameElse' : 12 | diff < -1 ? 'lastWeek' : 13 | diff < 0 ? 'lastDay' : 14 | diff < 1 ? 'sameDay' : 15 | diff < 2 ? 'nextDay' : 16 | diff < 7 ? 'nextWeek' : 'sameElse'; 17 | 18 | var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]); 19 | 20 | return this.format(output || this.localeData().calendar(format, this, createLocal(now))); 21 | } 22 | -------------------------------------------------------------------------------- /httpd/helpers_test.go: -------------------------------------------------------------------------------- 1 | package httpd 2 | 3 | import ( 4 | "html/template" 5 | "testing" 6 | 7 | "github.com/stretchr/testify/assert" 8 | ) 9 | 10 | func TestTextToHtml(t *testing.T) { 11 | // Identity 12 | assert.Equal(t, TextToHTML("html"), template.HTML("html")) 13 | 14 | // Check it escapes 15 | assert.Equal(t, TextToHTML(""), template.HTML("<html>")) 16 | 17 | // Check for linebreaks 18 | assert.Equal(t, TextToHTML("line\nbreak"), template.HTML("line
    \nbreak")) 19 | assert.Equal(t, TextToHTML("line\r\nbreak"), template.HTML("line
    \nbreak")) 20 | assert.Equal(t, TextToHTML("line\rbreak"), template.HTML("line
    \nbreak")) 21 | } 22 | 23 | func TestURLDetection(t *testing.T) { 24 | assert.Equal(t, 25 | TextToHTML("http://google.com/"), 26 | template.HTML("http://google.com/")) 27 | assert.Equal(t, 28 | TextToHTML("http://a.com/?q=a&n=v"), 29 | template.HTML("http://a.com/?q=a&n=v")) 30 | } 31 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-load-template/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-load-template", 3 | "homepage": "http://codepb.github.io/jquery-template/", 4 | "authors": [ 5 | "Paul Burgess " 6 | ], 7 | "description": "jQuery plugin for loading and using templates. The plugin is designed to be simple yet powerful, and supports loading templates from within the page, or using AJAX to load html files.", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/codepb/jquery-template.git" 11 | }, 12 | "main": "dist/jquery.loadTemplate-1.5.6.js", 13 | "keywords": [ 14 | "templates", 15 | "templating", 16 | "jquery-plugin" 17 | ], 18 | "ignore": [ 19 | "Examples", 20 | "tests", 21 | ".gitattributes", 22 | ".gitignore", 23 | ".travis.yml", 24 | "loadTemplate.jquery.json", 25 | "MIT-LICENSE.txt", 26 | "package.json", 27 | "readme.md" 28 | ], 29 | "dependencies": { 30 | "jquery": ">=1.8" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | } 48 | 49 | 50 | // For Affix plugin 51 | // ------------------------- 52 | 53 | .affix { 54 | position: fixed; 55 | } 56 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/day-of-month.js: -------------------------------------------------------------------------------- 1 | import { makeGetSet } from '../moment/get-set'; 2 | import { addFormatToken } from '../format/format'; 3 | import { addUnitAlias } from './aliases'; 4 | import { addRegexToken, match1to2, match2 } from '../parse/regex'; 5 | import { addParseToken } from '../parse/token'; 6 | import { DATE } from './constants'; 7 | import toInt from '../utils/to-int'; 8 | 9 | // FORMATTING 10 | 11 | addFormatToken('D', ['DD', 2], 'Do', 'date'); 12 | 13 | // ALIASES 14 | 15 | addUnitAlias('date', 'D'); 16 | 17 | // PARSING 18 | 19 | addRegexToken('D', match1to2); 20 | addRegexToken('DD', match1to2, match2); 21 | addRegexToken('Do', function (isStrict, locale) { 22 | return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; 23 | }); 24 | 25 | addParseToken(['D', 'DD'], DATE); 26 | addParseToken('Do', function (input, array) { 27 | array[DATE] = toInt(input.match(match1to2)[0], 10); 28 | }); 29 | 30 | // MOMENTS 31 | 32 | export var getSetDayOfMonth = makeGetSet('Date', true); 33 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/utils/deprecate.js: -------------------------------------------------------------------------------- 1 | import extend from './extend'; 2 | import { hooks } from './hooks'; 3 | import isUndefined from './is-undefined'; 4 | 5 | function warn(msg) { 6 | if (hooks.suppressDeprecationWarnings === false && 7 | (typeof console !== 'undefined') && console.warn) { 8 | console.warn('Deprecation warning: ' + msg); 9 | } 10 | } 11 | 12 | export function deprecate(msg, fn) { 13 | var firstTime = true; 14 | 15 | return extend(function () { 16 | if (firstTime) { 17 | warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); 18 | firstTime = false; 19 | } 20 | return fn.apply(this, arguments); 21 | }, fn); 22 | } 23 | 24 | var deprecations = {}; 25 | 26 | export function deprecateSimple(name, msg) { 27 | if (!deprecations[name]) { 28 | warn(msg); 29 | deprecations[name] = true; 30 | } 31 | } 32 | 33 | hooks.suppressDeprecationWarnings = false; 34 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/parse/token.js: -------------------------------------------------------------------------------- 1 | import hasOwnProp from '../utils/has-own-prop'; 2 | import toInt from '../utils/to-int'; 3 | 4 | var tokens = {}; 5 | 6 | export function addParseToken (token, callback) { 7 | var i, func = callback; 8 | if (typeof token === 'string') { 9 | token = [token]; 10 | } 11 | if (typeof callback === 'number') { 12 | func = function (input, array) { 13 | array[callback] = toInt(input); 14 | }; 15 | } 16 | for (i = 0; i < token.length; i++) { 17 | tokens[token[i]] = func; 18 | } 19 | } 20 | 21 | export function addWeekParseToken (token, callback) { 22 | addParseToken(token, function (input, array, config, token) { 23 | config._w = config._w || {}; 24 | callback(input, config._w, config, token); 25 | }); 26 | } 27 | 28 | export function addTimeToArrayFromToken(token, input, config) { 29 | if (input != null && hasOwnProp(tokens, token)) { 30 | tokens[token](input, config._a, config, token); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/units/day-of-year.js: -------------------------------------------------------------------------------- 1 | import { addFormatToken } from '../format/format'; 2 | import { addUnitAlias } from './aliases'; 3 | import { addRegexToken, match3, match1to3 } from '../parse/regex'; 4 | import { daysInYear } from './year'; 5 | import { createUTCDate } from '../create/date-from-array'; 6 | import { addParseToken } from '../parse/token'; 7 | import toInt from '../utils/to-int'; 8 | 9 | // FORMATTING 10 | 11 | addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); 12 | 13 | // ALIASES 14 | 15 | addUnitAlias('dayOfYear', 'DDD'); 16 | 17 | // PARSING 18 | 19 | addRegexToken('DDD', match1to3); 20 | addRegexToken('DDDD', match3); 21 | addParseToken(['DDD', 'DDDD'], function (input, array, config) { 22 | config._dayOfYear = toInt(input); 23 | }); 24 | 25 | // HELPERS 26 | 27 | // MOMENTS 28 | 29 | export function getSetDayOfYear (input) { 30 | var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; 31 | return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); 32 | } 33 | -------------------------------------------------------------------------------- /webui/recent.go: -------------------------------------------------------------------------------- 1 | package webui 2 | 3 | import ( 4 | "github.com/jhillyerd/inbucket/httpd" 5 | ) 6 | 7 | const ( 8 | // maximum mailboxes to remember 9 | maxRemembered = 8 10 | // session value key; referenced in templates, do not change 11 | mailboxKey = "recentMailboxes" 12 | ) 13 | 14 | // RememberMailbox manages the list of recently accessed mailboxes stored in the session 15 | func RememberMailbox(ctx *httpd.Context, mailbox string) { 16 | recent := RecentMailboxes(ctx) 17 | newRecent := make([]string, 1, maxRemembered) 18 | newRecent[0] = mailbox 19 | 20 | for _, recBox := range recent { 21 | // Insert until newRecent is full, but don't repeat the new mailbox 22 | if len(newRecent) < maxRemembered && mailbox != recBox { 23 | newRecent = append(newRecent, recBox) 24 | } 25 | } 26 | 27 | ctx.Session.Values[mailboxKey] = newRecent 28 | } 29 | 30 | // RecentMailboxes returns a slice of the most recently accessed mailboxes 31 | func RecentMailboxes(ctx *httpd.Context) []string { 32 | val := ctx.Session.Values[mailboxKey] 33 | recent, _ := val.([]string) 34 | return recent 35 | } 36 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/format.js: -------------------------------------------------------------------------------- 1 | import { formatMoment } from '../format/format'; 2 | import { hooks } from '../utils/hooks'; 3 | import isFunction from '../utils/is-function'; 4 | 5 | hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; 6 | 7 | export function toString () { 8 | return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); 9 | } 10 | 11 | export function toISOString () { 12 | var m = this.clone().utc(); 13 | if (0 < m.year() && m.year() <= 9999) { 14 | if (isFunction(Date.prototype.toISOString)) { 15 | // native implementation is ~50x faster, use it when we can 16 | return this.toDate().toISOString(); 17 | } else { 18 | return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); 19 | } 20 | } else { 21 | return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); 22 | } 23 | } 24 | 25 | export function format (inputString) { 26 | var output = formatMoment(this, inputString || hooks.defaultFormat); 27 | return this.localeData().postformat(output); 28 | } 29 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/attributes/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | ( function() { 7 | var input = document.createElement( "input" ), 8 | select = document.createElement( "select" ), 9 | opt = select.appendChild( document.createElement( "option" ) ); 10 | 11 | input.type = "checkbox"; 12 | 13 | // Support: iOS<=5.1, Android<=4.2+ 14 | // Default value for a checkbox should be "on" 15 | support.checkOn = input.value !== ""; 16 | 17 | // Support: IE<=11+ 18 | // Must access selectedIndex to make default options select 19 | support.optSelected = opt.selected; 20 | 21 | // Support: Android<=2.3 22 | // Options inside disabled selects are incorrectly marked as disabled 23 | select.disabled = true; 24 | support.optDisabled = !opt.disabled; 25 | 26 | // Support: IE<=11+ 27 | // An input loses its value after becoming a radio 28 | input = document.createElement( "input" ); 29 | input.value = "t"; 30 | input.type = "radio"; 31 | support.radioValue = input.value === "t"; 32 | } )(); 33 | 34 | return support; 35 | 36 | } ); 37 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | /* jshint strict:false */ 4 | /* global Package:true */ 5 | 6 | Package.describe({ 7 | name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap 8 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 9 | version: '3.3.6', 10 | git: 'https://github.com/twbs/bootstrap.git' 11 | }); 12 | 13 | Package.onUse(function (api) { 14 | api.versionsFrom('METEOR@1.0'); 15 | api.use('jquery', 'client'); 16 | var assets = [ 17 | 'dist/fonts/glyphicons-halflings-regular.eot', 18 | 'dist/fonts/glyphicons-halflings-regular.svg', 19 | 'dist/fonts/glyphicons-halflings-regular.ttf', 20 | 'dist/fonts/glyphicons-halflings-regular.woff', 21 | 'dist/fonts/glyphicons-halflings-regular.woff2' 22 | ]; 23 | if (api.addAssets) { 24 | api.addAssets(assets, 'client'); 25 | } else { 26 | api.addFiles(assets, 'client', { isAsset: true }); 27 | } 28 | api.addFiles([ 29 | 'dist/css/bootstrap.css', 30 | 'dist/js/bootstrap.js' 31 | ], 'client'); 32 | }); 33 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/locale.js: -------------------------------------------------------------------------------- 1 | import { getLocale } from '../locale/locales'; 2 | import { deprecate } from '../utils/deprecate'; 3 | 4 | // If passed a locale key, it will set the locale for this 5 | // instance. Otherwise, it will return the locale configuration 6 | // variables for this instance. 7 | export function locale (key) { 8 | var newLocaleData; 9 | 10 | if (key === undefined) { 11 | return this._locale._abbr; 12 | } else { 13 | newLocaleData = getLocale(key); 14 | if (newLocaleData != null) { 15 | this._locale = newLocaleData; 16 | } 17 | return this; 18 | } 19 | } 20 | 21 | export var lang = deprecate( 22 | 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', 23 | function (key) { 24 | if (key === undefined) { 25 | return this.localeData(); 26 | } else { 27 | return this.locale(key); 28 | } 29 | } 30 | ); 31 | 32 | export function localeData () { 33 | return this._locale; 34 | } 35 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | }, 34 | "version": "3.3.6", 35 | "_release": "3.3.6", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.3.6", 39 | "commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a" 40 | }, 41 | "_source": "git://github.com/twbs/bootstrap.git", 42 | "_target": "3.3", 43 | "_originalSource": "bootstrap" 44 | } -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: @cursor-disabled; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/exports/amd.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Register as a named AMD module, since jQuery can be concatenated with other 6 | // files that may use define, but not via a proper concatenation script that 7 | // understands anonymous AMD modules. A named AMD is safest and most robust 8 | // way to register. Lowercase jquery is used because AMD module names are 9 | // derived from file names, and jQuery is normally delivered in a lowercase 10 | // file name. Do this after creating the global so that if an AMD module wants 11 | // to call noConflict to hide this version of jQuery, it will work. 12 | 13 | // Note that for maximum portability, libraries that are not jQuery should 14 | // declare themselves as anonymous modules, and avoid setting a global if an 15 | // AMD loader is present. jQuery is a special case. For more information, see 16 | // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 17 | 18 | if ( typeof define === "function" && define.amd ) { 19 | define( "jquery", [], function() { 20 | return jQuery; 21 | } ); 22 | } 23 | 24 | } ); 25 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/sparkline.jquery.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sparkline", 3 | "title": "jQuery Sparkline", 4 | "description": "Easily generate small, inline sparkline charts directly in the browser", 5 | "keywords": [ 6 | "canvas", 7 | "charts", 8 | "graphics", 9 | "graphing", 10 | "graphs", 11 | "sparklines", 12 | "ui", 13 | "vml" 14 | ], 15 | "version": "2.1.2", 16 | "author": { 17 | "name": "Gareth Watts", 18 | "url": "http://gwatts.com/" 19 | }, 20 | "licenses": [ 21 | { 22 | "type": "BSD-3-Clause", 23 | "url": "http://opensource.org/licenses/BSD-3-Clause" 24 | } 25 | ], 26 | "bugs": "https://github.com/gwatts/jquery.sparkline/issues", 27 | "homepage": "http://omnipotent.net/jquery.sparkline/", 28 | "demo": "http://omnipotent.net/jquery.sparkline/", 29 | "docs": "http://omnipotent.net/jquery.sparkline/#s-docs", 30 | "download": "http://omnipotent.net/jquery.sparkline/#s-download", 31 | "dependencies": { 32 | "jquery": ">=1.4.3" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012 James Hillyerd, All Rights Reserved 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/grunt/bs-commonjs-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for the CommonJS module generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var path = require('path'); 12 | 13 | var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n'; 14 | 15 | module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) { 16 | var destDir = path.dirname(destFilepath); 17 | 18 | function srcPathToDestRequire(srcFilepath) { 19 | var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/'); 20 | return 'require(\'' + requirePath + '\')'; 21 | } 22 | 23 | var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n'); 24 | try { 25 | fs.writeFileSync(destFilepath, moduleOutputJs); 26 | } catch (err) { 27 | grunt.fail.warn(err); 28 | } 29 | grunt.log.writeln('File ' + destFilepath.cyan + ' created.'); 30 | }; 31 | -------------------------------------------------------------------------------- /swaks-tests/run-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # run-tests.sh 3 | # description: Generate test emails for Inbucket 4 | 5 | set -eo pipefail 6 | 7 | # We need to be in swaks-tests directory 8 | cmdpath="$(dirname "$0")" 9 | if [ "$cmdpath" != "." ]; then 10 | cd "$cmdpath" 11 | fi 12 | 13 | case "$1" in 14 | "") 15 | to="swaks" 16 | ;; 17 | --*) 18 | to="swaks" 19 | ;; 20 | *) 21 | to="$1" 22 | ;; 23 | esac 24 | 25 | export SWAKS_OPT_server="127.0.0.1:2500" 26 | export SWAKS_OPT_to="$to@inbucket.local" 27 | 28 | # Basic test 29 | swaks $* --h-Subject: "Swaks Plain Text" --body text.txt 30 | 31 | # HTML test 32 | swaks $* --h-Subject: "Swaks HTML" --data mime-html.raw 33 | 34 | # Top level HTML test 35 | swaks $* --h-Subject: "Swaks Top Level HTML" --data nonmime-html.raw 36 | 37 | # Attachment test 38 | swaks $* --h-Subject: "Swaks Attachment" --attach-type image/png --attach favicon.png --body text.txt 39 | 40 | # Encoded subject line test 41 | swaks $* --data utf8-subject.raw 42 | 43 | # Gmail test 44 | swaks $* --data gmail.raw 45 | 46 | # Outlook test 47 | swaks $* --data outlook.raw 48 | 49 | # Nonemime responsive HTML test 50 | swaks $* --data nonmime-html-responsive.raw 51 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2015 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/valid.js: -------------------------------------------------------------------------------- 1 | import extend from '../utils/extend'; 2 | import { createUTC } from './utc'; 3 | import getParsingFlags from '../create/parsing-flags'; 4 | 5 | export function isValid(m) { 6 | if (m._isValid == null) { 7 | var flags = getParsingFlags(m); 8 | m._isValid = !isNaN(m._d.getTime()) && 9 | flags.overflow < 0 && 10 | !flags.empty && 11 | !flags.invalidMonth && 12 | !flags.invalidWeekday && 13 | !flags.nullInput && 14 | !flags.invalidFormat && 15 | !flags.userInvalidated; 16 | 17 | if (m._strict) { 18 | m._isValid = m._isValid && 19 | flags.charsLeftOver === 0 && 20 | flags.unusedTokens.length === 0 && 21 | flags.bigHour === undefined; 22 | } 23 | } 24 | return m._isValid; 25 | } 26 | 27 | export function createInvalid (flags) { 28 | var m = createUTC(NaN); 29 | if (flags != null) { 30 | extend(getParsingFlags(m), flags); 31 | } 32 | else { 33 | getParsingFlags(m).userInvalidated = true; 34 | } 35 | 36 | return m; 37 | } 38 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-color", 3 | "title": "jQuery Color", 4 | "description": "jQuery plugin for color manipulation and animation support.", 5 | "version": "2.1.2", 6 | "homepage": "https://github.com/jquery/jquery-color", 7 | "author": { 8 | "name": "jQuery Foundation and other contributors", 9 | "url": "https://github.com/jquery/jquery-color/blob/master/AUTHORS.txt" 10 | }, 11 | "maintainers": [ 12 | { 13 | "name": "Corey Frang", 14 | "email": "gnarf37@gmail.com", 15 | "url": "http://gnarf.net" 16 | } 17 | ], 18 | "repository": { 19 | "type": "git", 20 | "url": "git://github.com/jquery/jquery-color.git" 21 | }, 22 | "bugs": "https://github.com/jquery/jquery-color/issues", 23 | "licenses": [ 24 | { 25 | "type": "MIT", 26 | "url": "https://github.com/jquery/jquery-color/blob/master/MIT-LICENSE.txt" 27 | } 28 | ], 29 | "dependencies": {}, 30 | "devDependencies": { 31 | "grunt": "~0.3.17", 32 | "grunt-compare-size": ">=0.1.4", 33 | "grunt-git-authors": "1.0.0", 34 | "testswarm": "0.2.2" 35 | }, 36 | "keywords": [ "color", "animation" ] 37 | } 38 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/manipulation/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/document", 3 | "../var/support" 4 | ], function( document, support ) { 5 | 6 | ( function() { 7 | var fragment = document.createDocumentFragment(), 8 | div = fragment.appendChild( document.createElement( "div" ) ), 9 | input = document.createElement( "input" ); 10 | 11 | // Support: Android 4.0-4.3, Safari<=5.1 12 | // Check state lost if the name is set (#11217) 13 | // Support: Windows Web Apps (WWA) 14 | // `name` and `type` must use .setAttribute for WWA (#14901) 15 | input.setAttribute( "type", "radio" ); 16 | input.setAttribute( "checked", "checked" ); 17 | input.setAttribute( "name", "t" ); 18 | 19 | div.appendChild( input ); 20 | 21 | // Support: Safari<=5.1, Android<4.2 22 | // Older WebKit doesn't clone checked state correctly in fragments 23 | support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 24 | 25 | // Support: IE<=11+ 26 | // Make sure textarea (and checkbox) defaultValue is properly cloned 27 | div.innerHTML = ""; 28 | support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 29 | } )(); 30 | 31 | return support; 32 | 33 | } ); 34 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-color/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2013 jQuery Foundation and other contributors, 2 | http://jquery.com 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/media.less: -------------------------------------------------------------------------------- 1 | .media { 2 | // Proper spacing between instances of .media 3 | margin-top: 15px; 4 | 5 | &:first-child { 6 | margin-top: 0; 7 | } 8 | } 9 | 10 | .media, 11 | .media-body { 12 | zoom: 1; 13 | overflow: hidden; 14 | } 15 | 16 | .media-body { 17 | width: 10000px; 18 | } 19 | 20 | .media-object { 21 | display: block; 22 | 23 | // Fix collapse in webkit from max-width: 100% and display: table-cell. 24 | &.img-thumbnail { 25 | max-width: none; 26 | } 27 | } 28 | 29 | .media-right, 30 | .media > .pull-right { 31 | padding-left: 10px; 32 | } 33 | 34 | .media-left, 35 | .media > .pull-left { 36 | padding-right: 10px; 37 | } 38 | 39 | .media-left, 40 | .media-right, 41 | .media-body { 42 | display: table-cell; 43 | vertical-align: top; 44 | } 45 | 46 | .media-middle { 47 | vertical-align: middle; 48 | } 49 | 50 | .media-bottom { 51 | vertical-align: bottom; 52 | } 53 | 54 | // Reset margins on headings for tighter default spacing 55 | .media-heading { 56 | margin-top: 0; 57 | margin-bottom: 5px; 58 | } 59 | 60 | // Media list variation 61 | // 62 | // Undo default ul/ol styles 63 | .media-list { 64 | padding-left: 0; 65 | list-style: none; 66 | } 67 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/css/showHide.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../data/var/dataPriv" 3 | ], function( dataPriv ) { 4 | 5 | function showHide( elements, show ) { 6 | var display, elem, 7 | values = [], 8 | index = 0, 9 | length = elements.length; 10 | 11 | // Determine new display value for elements that need to change 12 | for ( ; index < length; index++ ) { 13 | elem = elements[ index ]; 14 | if ( !elem.style ) { 15 | continue; 16 | } 17 | 18 | display = elem.style.display; 19 | if ( show ) { 20 | if ( display === "none" ) { 21 | 22 | // Restore a pre-hide() value if we have one 23 | values[ index ] = dataPriv.get( elem, "display" ) || ""; 24 | } 25 | } else { 26 | if ( display !== "none" ) { 27 | values[ index ] = "none"; 28 | 29 | // Remember the value we're replacing 30 | dataPriv.set( elem, "display", display ); 31 | } 32 | } 33 | } 34 | 35 | // Set the display of the elements in a second loop 36 | // to avoid the constant reflow 37 | for ( index = 0; index < length; index++ ) { 38 | if ( values[ index ] != null ) { 39 | elements[ index ].style.display = values[ index ]; 40 | } 41 | } 42 | 43 | return elements; 44 | } 45 | 46 | return showHide; 47 | 48 | } ); 49 | -------------------------------------------------------------------------------- /themes/integral/templates/mailbox/_show.html: -------------------------------------------------------------------------------- 1 | {{$name := .name}} 2 | {{$id := .message.ID}} 3 |
    4 | Link 5 | Delete 6 | Source 7 | {{if .htmlAvailable}} 8 | HTML 9 | {{end}} 10 |
    11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
    From:{{.message.From}}
    Date:{{.message.Date}}
    21 | 22 | {{with .attachments}} 23 |
    24 | 25 | {{range $i, $e := .}} 26 | 27 | 28 | 29 | 30 | 31 | 32 | {{end}} 33 |
    Attachments:
    {{$e.FileName}}({{$e.ContentType}})ViewDownload
    34 | {{end}} 35 | 36 |

    {{.message.Subject}}

    37 | 38 |
    {{.body}}
    39 | 40 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins/image.less: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | .img-responsive(@display: block) { 10 | display: @display; 11 | max-width: 100%; // Part 1: Set a maximum relative to the parent 12 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 13 | } 14 | 15 | 16 | // Retina image 17 | // 18 | // Short retina mixin for setting background-image and -size. Note that the 19 | // spelling of `min--moz-device-pixel-ratio` is intentional. 20 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { 21 | background-image: url("@{file-1x}"); 22 | 23 | @media 24 | only screen and (-webkit-min-device-pixel-ratio: 2), 25 | only screen and ( min--moz-device-pixel-ratio: 2), 26 | only screen and ( -o-min-device-pixel-ratio: 2/1), 27 | only screen and ( min-device-pixel-ratio: 2), 28 | only screen and ( min-resolution: 192dpi), 29 | only screen and ( min-resolution: 2dppx) { 30 | background-image: url("@{file-2x}"); 31 | background-size: @width-1x @height-1x; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/get-set.js: -------------------------------------------------------------------------------- 1 | import { normalizeUnits } from '../units/aliases'; 2 | import { hooks } from '../utils/hooks'; 3 | import isFunction from '../utils/is-function'; 4 | 5 | export function makeGetSet (unit, keepTime) { 6 | return function (value) { 7 | if (value != null) { 8 | set(this, unit, value); 9 | hooks.updateOffset(this, keepTime); 10 | return this; 11 | } else { 12 | return get(this, unit); 13 | } 14 | }; 15 | } 16 | 17 | export function get (mom, unit) { 18 | return mom.isValid() ? 19 | mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; 20 | } 21 | 22 | export function set (mom, unit, value) { 23 | if (mom.isValid()) { 24 | mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); 25 | } 26 | } 27 | 28 | // MOMENTS 29 | 30 | export function getSet (units, value) { 31 | var unit; 32 | if (typeof units === 'object') { 33 | for (unit in units) { 34 | this.set(unit, units[unit]); 35 | } 36 | } else { 37 | units = normalizeUnits(units); 38 | if (isFunction(this[units])) { 39 | return this[units](value); 40 | } 41 | } 42 | return this; 43 | } 44 | -------------------------------------------------------------------------------- /etc/docker/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # install.sh 3 | # description: Build, test, and install Inbucket. Should be executed inside a Docker container. 4 | 5 | set -eo pipefail 6 | 7 | installdir="$INBUCKET_HOME" 8 | srcdir="$INBUCKET_SRC" 9 | bindir="$installdir/bin" 10 | defaultsdir="$installdir/defaults" 11 | contextdir="/con/context" 12 | 13 | echo "### Installing OS Build Dependencies" 14 | apk add --no-cache --virtual .build-deps git 15 | 16 | # Setup 17 | export GOBIN="$bindir" 18 | builddate="$(date -Iseconds)" 19 | cd "$srcdir" 20 | go clean 21 | 22 | # Build 23 | echo "### Fetching Dependencies" 24 | go get -t -v ./... 25 | 26 | echo "### Testing Inbucket" 27 | go test ./... 28 | 29 | echo "### Building Inbucket" 30 | go build -o inbucket -ldflags "-X 'main.BUILDDATE=$builddate'" -v . 31 | 32 | echo "### Installing Inbucket" 33 | set -x 34 | mkdir -p "$bindir" 35 | install inbucket "$bindir" 36 | mkdir -p "$contextdir" 37 | install etc/docker/defaults/start-inbucket.sh "$contextdir" 38 | cp -r themes "$installdir/" 39 | mkdir -p "$defaultsdir" 40 | cp etc/docker/defaults/inbucket.conf "$defaultsdir" 41 | cp etc/docker/defaults/greeting.html "$defaultsdir" 42 | set +x 43 | 44 | echo "### Removing OS Build Dependencies" 45 | apk del .build-deps 46 | 47 | echo "### Removing $GOPATH" 48 | rm -rf "$GOPATH" 49 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/Makefile: -------------------------------------------------------------------------------- 1 | SRC_DIR = src 2 | DIST_DIR = dist 3 | COMPILER ?= `which uglifyjs` --no-copyright 4 | 5 | 6 | SRC_FILES = $(SRC_DIR)/header.js\ 7 | $(SRC_DIR)/defaults.js\ 8 | $(SRC_DIR)/utils.js\ 9 | $(SRC_DIR)/simpledraw.js\ 10 | $(SRC_DIR)/rangemap.js\ 11 | $(SRC_DIR)/interact.js\ 12 | $(SRC_DIR)/base.js\ 13 | $(SRC_DIR)/chart-line.js\ 14 | $(SRC_DIR)/chart-bar.js\ 15 | $(SRC_DIR)/chart-tristate.js\ 16 | $(SRC_DIR)/chart-discrete.js\ 17 | $(SRC_DIR)/chart-bullet.js\ 18 | $(SRC_DIR)/chart-pie.js\ 19 | $(SRC_DIR)/chart-box.js\ 20 | $(SRC_DIR)/vcanvas-base.js\ 21 | $(SRC_DIR)/vcanvas-canvas.js\ 22 | $(SRC_DIR)/vcanvas-vml.js\ 23 | $(SRC_DIR)/footer.js 24 | 25 | 26 | VERSION = $(shell cat version.txt) 27 | 28 | all: jqs-gzip jqs-min-gzip Changelog.txt 29 | 30 | jqs: ${SRC_FILES} 31 | cat ${SRC_FILES} | sed 's/@VERSION@/${VERSION}/' >${DIST_DIR}/jquery.sparkline.js 32 | 33 | jqs-min: jqs 34 | cat minheader.txt | sed 's/@VERSION@/${VERSION}/' >dist/jquery.sparkline.min.js 35 | ${COMPILER} dist/jquery.sparkline.js >>dist/jquery.sparkline.min.js 36 | 37 | jqs-gzip: jqs 38 | gzip -9 < dist/jquery.sparkline.js >dist/jquery.sparkline.js.gz 39 | 40 | jqs-min-gzip: jqs-min 41 | gzip -9 < dist/jquery.sparkline.min.js >dist/jquery.sparkline.min.js.gz 42 | -------------------------------------------------------------------------------- /etc/docker/docker-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # docker-run.sh 3 | # description: Launch Inbucket's docker image 4 | 5 | # Docker Image Tag 6 | IMAGE="jhillyerd/inbucket" 7 | 8 | # Ports exposed on host: 9 | PORT_HTTP=9000 10 | PORT_SMTP=2500 11 | PORT_POP3=1100 12 | 13 | # Volumes exposed on host: 14 | VOL_CONFIG="/tmp/inbucket/config" 15 | VOL_DATA="/tmp/inbucket/data" 16 | 17 | set -eo pipefail 18 | 19 | main() { 20 | local run_opts="" 21 | 22 | for arg in $*; do 23 | case "$arg" in 24 | -h) 25 | usage 26 | exit 27 | ;; 28 | -r) 29 | reset 30 | ;; 31 | -d) 32 | run_opts="$run_opts -d" 33 | ;; 34 | *) 35 | usage 36 | exit 1 37 | ;; 38 | esac 39 | done 40 | 41 | docker run $run_opts \ 42 | -p $PORT_HTTP:10080 \ 43 | -p $PORT_SMTP:10025 \ 44 | -p $PORT_POP3:10110 \ 45 | -v "$VOL_CONFIG:/con/configuration" \ 46 | -v "$VOL_DATA:/con/data" \ 47 | "$IMAGE" 48 | } 49 | 50 | usage() { 51 | echo "$0 [options]" 2>&1 52 | echo " -d detach - detach and print container ID" 2>&1 53 | echo " -r reset - purge config and data before startup" 2>&1 54 | echo " -h help - print this message" 2>&1 55 | } 56 | 57 | reset() { 58 | /bin/rm -rf "$VOL_CONFIG" 59 | /bin/rm -rf "$VOL_DATA" 60 | } 61 | 62 | main $* 63 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | // Utilities 5 | @import "mixins/hide-text.less"; 6 | @import "mixins/opacity.less"; 7 | @import "mixins/image.less"; 8 | @import "mixins/labels.less"; 9 | @import "mixins/reset-filter.less"; 10 | @import "mixins/resize.less"; 11 | @import "mixins/responsive-visibility.less"; 12 | @import "mixins/size.less"; 13 | @import "mixins/tab-focus.less"; 14 | @import "mixins/reset-text.less"; 15 | @import "mixins/text-emphasis.less"; 16 | @import "mixins/text-overflow.less"; 17 | @import "mixins/vendor-prefixes.less"; 18 | 19 | // Components 20 | @import "mixins/alerts.less"; 21 | @import "mixins/buttons.less"; 22 | @import "mixins/panels.less"; 23 | @import "mixins/pagination.less"; 24 | @import "mixins/list-group.less"; 25 | @import "mixins/nav-divider.less"; 26 | @import "mixins/forms.less"; 27 | @import "mixins/progress-bar.less"; 28 | @import "mixins/table-row.less"; 29 | 30 | // Skins 31 | @import "mixins/background-variant.less"; 32 | @import "mixins/border-radius.less"; 33 | @import "mixins/gradients.less"; 34 | 35 | // Layout 36 | @import "mixins/clearfix.less"; 37 | @import "mixins/center-block.less"; 38 | @import "mixins/nav-vertical-align.less"; 39 | @import "mixins/grid-framework.less"; 40 | @import "mixins/grid.less"; 41 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-load-template/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-load-template", 3 | "homepage": "http://codepb.github.io/jquery-template/", 4 | "authors": [ 5 | "Paul Burgess " 6 | ], 7 | "description": "jQuery plugin for loading and using templates. The plugin is designed to be simple yet powerful, and supports loading templates from within the page, or using AJAX to load html files.", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/codepb/jquery-template.git" 11 | }, 12 | "main": "dist/jquery.loadTemplate-1.5.6.js", 13 | "keywords": [ 14 | "templates", 15 | "templating", 16 | "jquery-plugin" 17 | ], 18 | "ignore": [ 19 | "Examples", 20 | "tests", 21 | ".gitattributes", 22 | ".gitignore", 23 | ".travis.yml", 24 | "loadTemplate.jquery.json", 25 | "MIT-LICENSE.txt", 26 | "package.json", 27 | "readme.md" 28 | ], 29 | "dependencies": { 30 | "jquery": ">=1.8" 31 | }, 32 | "version": "1.5.6", 33 | "_release": "1.5.6", 34 | "_resolution": { 35 | "type": "version", 36 | "tag": "1.5.6", 37 | "commit": "54c882c2aefa361e6faa7cdfc6abcf8c68bd505b" 38 | }, 39 | "_source": "git://github.com/codepb/jquery-template.git", 40 | "_target": "^1.5.6", 41 | "_originalSource": "jquery-load-template", 42 | "_direct": true 43 | } -------------------------------------------------------------------------------- /smtpd/datastore.go: -------------------------------------------------------------------------------- 1 | package smtpd 2 | 3 | import ( 4 | "errors" 5 | "io" 6 | "net/mail" 7 | "time" 8 | 9 | "github.com/jhillyerd/go.enmime" 10 | ) 11 | 12 | var ( 13 | // ErrNotExist indicates the requested message does not exist 14 | ErrNotExist = errors.New("Message does not exist") 15 | 16 | // ErrNotWritable indicates the message is closed; no longer writable 17 | ErrNotWritable = errors.New("Message not writable") 18 | ) 19 | 20 | // DataStore is an interface to get Mailboxes stored in Inbucket 21 | type DataStore interface { 22 | MailboxFor(emailAddress string) (Mailbox, error) 23 | AllMailboxes() ([]Mailbox, error) 24 | } 25 | 26 | // Mailbox is an interface to get and manipulate messages in a DataStore 27 | type Mailbox interface { 28 | GetMessages() ([]Message, error) 29 | GetMessage(id string) (Message, error) 30 | Purge() error 31 | NewMessage() (Message, error) 32 | String() string 33 | } 34 | 35 | // Message is an interface for a single message in a Mailbox 36 | type Message interface { 37 | ID() string 38 | From() string 39 | Date() time.Time 40 | Subject() string 41 | RawReader() (reader io.ReadCloser, err error) 42 | ReadHeader() (msg *mail.Message, err error) 43 | ReadBody() (body *enmime.MIMEBody, err error) 44 | ReadRaw() (raw *string, err error) 45 | Append(data []byte) error 46 | Close() error 47 | Delete() error 48 | String() string 49 | Size() int64 50 | } 51 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 3.3 6 | Bootstrap CSS 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in CSS. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | a& { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/nuget/bootstrap.less.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap.less 5 | 3.3 6 | Bootstrap Less 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in Less. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding-top: @jumbotron-padding; 8 | padding-bottom: @jumbotron-padding; 9 | margin-bottom: @jumbotron-padding; 10 | color: @jumbotron-color; 11 | background-color: @jumbotron-bg; 12 | 13 | h1, 14 | .h1 { 15 | color: @jumbotron-heading-color; 16 | } 17 | 18 | p { 19 | margin-bottom: (@jumbotron-padding / 2); 20 | font-size: @jumbotron-font-size; 21 | font-weight: 200; 22 | } 23 | 24 | > hr { 25 | border-top-color: darken(@jumbotron-bg, 10%); 26 | } 27 | 28 | .container &, 29 | .container-fluid & { 30 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 31 | padding-left: (@grid-gutter-width / 2); 32 | padding-right: (@grid-gutter-width / 2); 33 | } 34 | 35 | .container { 36 | max-width: 100%; 37 | } 38 | 39 | @media screen and (min-width: @screen-sm-min) { 40 | padding-top: (@jumbotron-padding * 1.6); 41 | padding-bottom: (@jumbotron-padding * 1.6); 42 | 43 | .container &, 44 | .container-fluid & { 45 | padding-left: (@jumbotron-padding * 2); 46 | padding-right: (@jumbotron-padding * 2); 47 | } 48 | 49 | h1, 50 | .h1 { 51 | font-size: @jumbotron-heading-font-size; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/locale/lists.js: -------------------------------------------------------------------------------- 1 | import { getLocale } from './locales'; 2 | import { createUTC } from '../create/utc'; 3 | 4 | function get (format, index, field, setter) { 5 | var locale = getLocale(); 6 | var utc = createUTC().set(setter, index); 7 | return locale[field](utc, format); 8 | } 9 | 10 | function list (format, index, field, count, setter) { 11 | if (typeof format === 'number') { 12 | index = format; 13 | format = undefined; 14 | } 15 | 16 | format = format || ''; 17 | 18 | if (index != null) { 19 | return get(format, index, field, setter); 20 | } 21 | 22 | var i; 23 | var out = []; 24 | for (i = 0; i < count; i++) { 25 | out[i] = get(format, i, field, setter); 26 | } 27 | return out; 28 | } 29 | 30 | export function listMonths (format, index) { 31 | return list(format, index, 'months', 12, 'month'); 32 | } 33 | 34 | export function listMonthsShort (format, index) { 35 | return list(format, index, 'monthsShort', 12, 'month'); 36 | } 37 | 38 | export function listWeekdays (format, index) { 39 | return list(format, index, 'weekdays', 7, 'day'); 40 | } 41 | 42 | export function listWeekdaysShort (format, index) { 43 | return list(format, index, 'weekdaysShort', 7, 'day'); 44 | } 45 | 46 | export function listWeekdaysMin (format, index) { 47 | return list(format, index, 'weekdaysMin', 7, 'day'); 48 | } 49 | -------------------------------------------------------------------------------- /themes/bootstrap/public/inbucket.css: -------------------------------------------------------------------------------- 1 | /* Site Wide */ 2 | html { 3 | position: relative; 4 | min-height: 100%; 5 | } 6 | 7 | body { 8 | padding-top: 70px; 9 | /* Margin bottom by footer height + safety */ 10 | margin-bottom: 100px; 11 | } 12 | 13 | .footer { 14 | position: absolute; 15 | bottom: 0; 16 | width: 100%; 17 | /* Set the fixed height of the footer here */ 18 | height: 70px; 19 | background-color: #f5f5f5; 20 | } 21 | 22 | .container .text-muted { 23 | margin: 20px 0; 24 | } 25 | 26 | /* Mailbox & Messages */ 27 | .mailbox-header { 28 | text-align: center; 29 | font-size: 18px; 30 | } 31 | 32 | .message-list-scroll { 33 | overflow-y: auto; 34 | } 35 | 36 | .message-controls { 37 | padding: 0 0 10px 0; 38 | } 39 | 40 | .message-header dl { 41 | margin-bottom: 0; 42 | } 43 | 44 | @media (min-width: 768px) { 45 | .message-header .dl-horizontal dt { 46 | width: 60px; 47 | } 48 | 49 | .message-header .dl-horizontal dd { 50 | margin-left: 70px; 51 | } 52 | } 53 | 54 | .message-body { 55 | padding: 0 5px; 56 | } 57 | 58 | .message-attachments { 59 | margin-top: 20px; 60 | padding: 10px 10px 0 0; 61 | } 62 | 63 | .message-attachments div { 64 | margin: 0 0 5px 0; 65 | } 66 | 67 | /* Metrics */ 68 | table.metrics { 69 | } 70 | 71 | .metrics th { 72 | text-align: left; 73 | width: 15em; 74 | } 75 | 76 | .metrics td.number { 77 | width: 10em; 78 | } 79 | 80 | .metrics td.sparkline { 81 | width: 200px; 82 | } 83 | 84 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/create/check-overflow.js: -------------------------------------------------------------------------------- 1 | import { daysInMonth } from '../units/month'; 2 | import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, WEEK, WEEKDAY } from '../units/constants'; 3 | import getParsingFlags from '../create/parsing-flags'; 4 | 5 | export default function checkOverflow (m) { 6 | var overflow; 7 | var a = m._a; 8 | 9 | if (a && getParsingFlags(m).overflow === -2) { 10 | overflow = 11 | a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : 12 | a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : 13 | a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : 14 | a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : 15 | a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : 16 | a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : 17 | -1; 18 | 19 | if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { 20 | overflow = DATE; 21 | } 22 | if (getParsingFlags(m)._overflowWeeks && overflow === -1) { 23 | overflow = WEEK; 24 | } 25 | if (getParsingFlags(m)._overflowWeekday && overflow === -1) { 26 | overflow = WEEKDAY; 27 | } 28 | 29 | getParsingFlags(m).overflow = overflow; 30 | } 31 | 32 | return m; 33 | } 34 | 35 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/core/parseHTML.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../var/document", 4 | "./var/rsingleTag", 5 | "../manipulation/buildFragment", 6 | 7 | // This is the only module that needs core/support 8 | "./support" 9 | ], function( jQuery, document, rsingleTag, buildFragment, support ) { 10 | 11 | // Argument "data" should be string of html 12 | // context (optional): If specified, the fragment will be created in this context, 13 | // defaults to document 14 | // keepScripts (optional): If true, will include scripts passed in the html string 15 | jQuery.parseHTML = function( data, context, keepScripts ) { 16 | if ( !data || typeof data !== "string" ) { 17 | return null; 18 | } 19 | if ( typeof context === "boolean" ) { 20 | keepScripts = context; 21 | context = false; 22 | } 23 | 24 | // Stop scripts or inline event handlers from being executed immediately 25 | // by using document.implementation 26 | context = context || ( support.createHTMLDocument ? 27 | document.implementation.createHTMLDocument( "" ) : 28 | document ); 29 | 30 | var parsed = rsingleTag.exec( data ), 31 | scripts = !keepScripts && []; 32 | 33 | // Single tag 34 | if ( parsed ) { 35 | return [ context.createElement( parsed[ 1 ] ) ]; 36 | } 37 | 38 | parsed = buildFragment( [ data ], context, scripts ); 39 | 40 | if ( scripts && scripts.length ) { 41 | jQuery( scripts ).remove(); 42 | } 43 | 44 | return jQuery.merge( [], parsed.childNodes ); 45 | }; 46 | 47 | return jQuery.parseHTML; 48 | 49 | } ); 50 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: middle; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | 32 | .btn-xs &, 33 | .btn-group-xs > .btn & { 34 | top: 0; 35 | padding: 1px 5px; 36 | } 37 | 38 | // Hover state, but only for links 39 | a& { 40 | &:hover, 41 | &:focus { 42 | color: @badge-link-hover-color; 43 | text-decoration: none; 44 | cursor: pointer; 45 | } 46 | } 47 | 48 | // Account for badges in navs 49 | .list-group-item.active > &, 50 | .nav-pills > .active > a > & { 51 | color: @badge-active-color; 52 | background-color: @badge-active-bg; 53 | } 54 | 55 | .list-group-item > & { 56 | float: right; 57 | } 58 | 59 | .list-group-item > & + & { 60 | margin-right: 5px; 61 | } 62 | 63 | .nav-pills > li > a > & { 64 | margin-left: 3px; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery-sparkline/src/rangemap.js: -------------------------------------------------------------------------------- 1 | $.RangeMapClass = RangeMap = createClass({ 2 | init: function (map) { 3 | var key, range, rangelist = []; 4 | for (key in map) { 5 | if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { 6 | range = key.split(':'); 7 | range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); 8 | range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); 9 | range[2] = map[key]; 10 | rangelist.push(range); 11 | } 12 | } 13 | this.map = map; 14 | this.rangelist = rangelist || false; 15 | }, 16 | 17 | get: function (value) { 18 | var rangelist = this.rangelist, 19 | i, range, result; 20 | if ((result = this.map[value]) !== undefined) { 21 | return result; 22 | } 23 | if (rangelist) { 24 | for (i = rangelist.length; i--;) { 25 | range = rangelist[i]; 26 | if (range[0] <= value && range[1] >= value) { 27 | return range[2]; 28 | } 29 | } 30 | } 31 | return undefined; 32 | } 33 | }); 34 | 35 | // Convenience function 36 | $.range_map = function(map) { 37 | return new RangeMap(map); 38 | }; 39 | 40 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/moment/start-end-of.js: -------------------------------------------------------------------------------- 1 | import { normalizeUnits } from '../units/aliases'; 2 | 3 | export function startOf (units) { 4 | units = normalizeUnits(units); 5 | // the following switch intentionally omits break keywords 6 | // to utilize falling through the cases. 7 | switch (units) { 8 | case 'year': 9 | this.month(0); 10 | /* falls through */ 11 | case 'quarter': 12 | case 'month': 13 | this.date(1); 14 | /* falls through */ 15 | case 'week': 16 | case 'isoWeek': 17 | case 'day': 18 | this.hours(0); 19 | /* falls through */ 20 | case 'hour': 21 | this.minutes(0); 22 | /* falls through */ 23 | case 'minute': 24 | this.seconds(0); 25 | /* falls through */ 26 | case 'second': 27 | this.milliseconds(0); 28 | } 29 | 30 | // weeks are a special case 31 | if (units === 'week') { 32 | this.weekday(0); 33 | } 34 | if (units === 'isoWeek') { 35 | this.isoWeekday(1); 36 | } 37 | 38 | // quarters are also special 39 | if (units === 'quarter') { 40 | this.month(Math.floor(this.month() / 3) * 3); 41 | } 42 | 43 | return this; 44 | } 45 | 46 | export function endOf (units) { 47 | units = normalizeUnits(units); 48 | if (units === undefined || units === 'millisecond') { 49 | return this; 50 | } 51 | return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); 52 | } 53 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/core/access.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Multifunctional method to get and set values of a collection 6 | // The value/s can optionally be executed if it's a function 7 | var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 8 | var i = 0, 9 | len = elems.length, 10 | bulk = key == null; 11 | 12 | // Sets many values 13 | if ( jQuery.type( key ) === "object" ) { 14 | chainable = true; 15 | for ( i in key ) { 16 | access( elems, fn, i, key[ i ], true, emptyGet, raw ); 17 | } 18 | 19 | // Sets one value 20 | } else if ( value !== undefined ) { 21 | chainable = true; 22 | 23 | if ( !jQuery.isFunction( value ) ) { 24 | raw = true; 25 | } 26 | 27 | if ( bulk ) { 28 | 29 | // Bulk operations run against the entire set 30 | if ( raw ) { 31 | fn.call( elems, value ); 32 | fn = null; 33 | 34 | // ...except when executing function values 35 | } else { 36 | bulk = fn; 37 | fn = function( elem, key, value ) { 38 | return bulk.call( jQuery( elem ), value ); 39 | }; 40 | } 41 | } 42 | 43 | if ( fn ) { 44 | for ( ; i < len; i++ ) { 45 | fn( 46 | elems[ i ], key, raw ? 47 | value : 48 | value.call( elems[ i ], i, fn( elems[ i ], key ) ) 49 | ); 50 | } 51 | } 52 | } 53 | 54 | return chainable ? 55 | elems : 56 | 57 | // Gets 58 | bulk ? 59 | fn.call( elems ) : 60 | len ? fn( elems[ 0 ], key ) : emptyGet; 61 | }; 62 | 63 | return access; 64 | 65 | } ); 66 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/less/bootstrap.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.6 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // Core variables and mixins 8 | @import "variables.less"; 9 | @import "mixins.less"; 10 | 11 | // Reset and dependencies 12 | @import "normalize.less"; 13 | @import "print.less"; 14 | @import "glyphicons.less"; 15 | 16 | // Core CSS 17 | @import "scaffolding.less"; 18 | @import "type.less"; 19 | @import "code.less"; 20 | @import "grid.less"; 21 | @import "tables.less"; 22 | @import "forms.less"; 23 | @import "buttons.less"; 24 | 25 | // Components 26 | @import "component-animations.less"; 27 | @import "dropdowns.less"; 28 | @import "button-groups.less"; 29 | @import "input-groups.less"; 30 | @import "navs.less"; 31 | @import "navbar.less"; 32 | @import "breadcrumbs.less"; 33 | @import "pagination.less"; 34 | @import "pager.less"; 35 | @import "labels.less"; 36 | @import "badges.less"; 37 | @import "jumbotron.less"; 38 | @import "thumbnails.less"; 39 | @import "alerts.less"; 40 | @import "progress-bars.less"; 41 | @import "media.less"; 42 | @import "list-group.less"; 43 | @import "panels.less"; 44 | @import "responsive-embed.less"; 45 | @import "wells.less"; 46 | @import "close.less"; 47 | 48 | // Components w/ JavaScript 49 | @import "modals.less"; 50 | @import "tooltip.less"; 51 | @import "popovers.less"; 52 | @import "carousel.less"; 53 | 54 | // Utility classes 55 | @import "utilities.less"; 56 | @import "responsive-utilities.less"; 57 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/grunt/bs-raw-files-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for generating raw-files.min.js for the Customizer 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var btoa = require('btoa'); 12 | var glob = require('glob'); 13 | 14 | function getFiles(type) { 15 | var files = {}; 16 | var recursive = type === 'less'; 17 | var globExpr = recursive ? '/**/*' : '/*'; 18 | glob.sync(type + globExpr) 19 | .filter(function (path) { 20 | return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); 21 | }) 22 | .forEach(function (fullPath) { 23 | var relativePath = fullPath.replace(/^[^/]+\//, ''); 24 | files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'); 25 | }); 26 | return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; 27 | } 28 | 29 | module.exports = function generateRawFilesJs(grunt, banner) { 30 | if (!banner) { 31 | banner = ''; 32 | } 33 | var dirs = ['js', 'less', 'fonts']; 34 | var files = banner + dirs.map(getFiles).reduce(function (combined, file) { 35 | return combined + file; 36 | }, ''); 37 | var rawFilesJs = 'docs/assets/js/raw-files.min.js'; 38 | try { 39 | fs.writeFileSync(rawFilesJs, files); 40 | } catch (err) { 41 | grunt.fail.warn(err); 42 | } 43 | grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); 44 | }; 45 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/lib/duration/constructor.js: -------------------------------------------------------------------------------- 1 | import { normalizeObjectUnits } from '../units/aliases'; 2 | import { getLocale } from '../locale/locales'; 3 | 4 | export function Duration (duration) { 5 | var normalizedInput = normalizeObjectUnits(duration), 6 | years = normalizedInput.year || 0, 7 | quarters = normalizedInput.quarter || 0, 8 | months = normalizedInput.month || 0, 9 | weeks = normalizedInput.week || 0, 10 | days = normalizedInput.day || 0, 11 | hours = normalizedInput.hour || 0, 12 | minutes = normalizedInput.minute || 0, 13 | seconds = normalizedInput.second || 0, 14 | milliseconds = normalizedInput.millisecond || 0; 15 | 16 | // representation for dateAddRemove 17 | this._milliseconds = +milliseconds + 18 | seconds * 1e3 + // 1000 19 | minutes * 6e4 + // 1000 * 60 20 | hours * 36e5; // 1000 * 60 * 60 21 | // Because of dateAddRemove treats 24 hours as different from a 22 | // day when working around DST, we need to store them separately 23 | this._days = +days + 24 | weeks * 7; 25 | // It is impossible translate months into days without knowing 26 | // which months you are are talking about, so we have to store 27 | // it separately. 28 | this._months = +months + 29 | quarters * 3 + 30 | years * 12; 31 | 32 | this._data = {}; 33 | 34 | this._locale = getLocale(); 35 | 36 | this._bubble(); 37 | } 38 | 39 | export function isDuration (obj) { 40 | return obj instanceof Duration; 41 | } 42 | -------------------------------------------------------------------------------- /webui/routes.go: -------------------------------------------------------------------------------- 1 | // Package webui powers Inbucket's web GUI 2 | package webui 3 | 4 | import ( 5 | "github.com/gorilla/mux" 6 | "github.com/jhillyerd/inbucket/httpd" 7 | ) 8 | 9 | // SetupRoutes populates routes for the webui into the provided Router 10 | func SetupRoutes(r *mux.Router) { 11 | r.Path("/").Handler(httpd.Handler(RootIndex)).Name("RootIndex").Methods("GET") 12 | r.Path("/status").Handler(httpd.Handler(RootStatus)).Name("RootStatus").Methods("GET") 13 | r.Path("/link/{name}/{id}").Handler(httpd.Handler(MailboxLink)).Name("MailboxLink").Methods("GET") 14 | r.Path("/mailbox").Handler(httpd.Handler(MailboxIndex)).Name("MailboxIndex").Methods("GET") 15 | r.Path("/mailbox/{name}").Handler(httpd.Handler(MailboxList)).Name("MailboxList").Methods("GET") 16 | r.Path("/mailbox/{name}").Handler(httpd.Handler(MailboxPurge)).Name("MailboxPurge").Methods("DELETE") 17 | r.Path("/mailbox/{name}/{id}").Handler(httpd.Handler(MailboxShow)).Name("MailboxShow").Methods("GET") 18 | r.Path("/mailbox/{name}/{id}/html").Handler(httpd.Handler(MailboxHTML)).Name("MailboxHtml").Methods("GET") 19 | r.Path("/mailbox/{name}/{id}/source").Handler(httpd.Handler(MailboxSource)).Name("MailboxSource").Methods("GET") 20 | r.Path("/mailbox/{name}/{id}").Handler(httpd.Handler(MailboxDelete)).Name("MailboxDelete").Methods("DELETE") 21 | r.Path("/mailbox/dattach/{name}/{id}/{num}/{file}").Handler(httpd.Handler(MailboxDownloadAttach)).Name("MailboxDownloadAttach").Methods("GET") 22 | r.Path("/mailbox/vattach/{name}/{id}/{num}/{file}").Handler(httpd.Handler(MailboxViewAttach)).Name("MailboxViewAttach").Methods("GET") 23 | } 24 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/intro.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery JavaScript Library v@VERSION 3 | * http://jquery.com/ 4 | * 5 | * Includes Sizzle.js 6 | * http://sizzlejs.com/ 7 | * 8 | * Copyright jQuery Foundation and other contributors 9 | * Released under the MIT license 10 | * http://jquery.org/license 11 | * 12 | * Date: @DATE 13 | */ 14 | 15 | (function( global, factory ) { 16 | 17 | if ( typeof module === "object" && typeof module.exports === "object" ) { 18 | // For CommonJS and CommonJS-like environments where a proper `window` 19 | // is present, execute the factory and get jQuery. 20 | // For environments that do not have a `window` with a `document` 21 | // (such as Node.js), expose a factory as module.exports. 22 | // This accentuates the need for the creation of a real `window`. 23 | // e.g. var jQuery = require("jquery")(window); 24 | // See ticket #14549 for more info. 25 | module.exports = global.document ? 26 | factory( global, true ) : 27 | function( w ) { 28 | if ( !w.document ) { 29 | throw new Error( "jQuery requires a window with a document" ); 30 | } 31 | return factory( w ); 32 | }; 33 | } else { 34 | factory( global ); 35 | } 36 | 37 | // Pass this if window is not defined yet 38 | }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 39 | 40 | // Support: Firefox 18+ 41 | // Can't be in strict mode, several libs including ASP.NET trace 42 | // the stack via arguments.caller.callee and Firefox dies if 43 | // you try to trace through "use strict" call chains. (#13335) 44 | //"use strict"; 45 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/grunt/configBridge.json: -------------------------------------------------------------------------------- 1 | { 2 | "paths": { 3 | "customizerJs": [ 4 | "../assets/js/vendor/autoprefixer.js", 5 | "../assets/js/vendor/less.min.js", 6 | "../assets/js/vendor/jszip.min.js", 7 | "../assets/js/vendor/uglify.min.js", 8 | "../assets/js/vendor/Blob.js", 9 | "../assets/js/vendor/FileSaver.js", 10 | "../assets/js/raw-files.min.js", 11 | "../assets/js/src/customizer.js" 12 | ], 13 | "docsJs": [ 14 | "../assets/js/vendor/holder.min.js", 15 | "../assets/js/vendor/ZeroClipboard.min.js", 16 | "../assets/js/vendor/anchor.js", 17 | "../assets/js/src/application.js" 18 | ] 19 | }, 20 | "config": { 21 | "autoprefixerBrowsers": [ 22 | "Android 2.3", 23 | "Android >= 4", 24 | "Chrome >= 20", 25 | "Firefox >= 24", 26 | "Explorer >= 8", 27 | "iOS >= 6", 28 | "Opera >= 12", 29 | "Safari >= 6" 30 | ], 31 | "jqueryCheck": [ 32 | "if (typeof jQuery === 'undefined') {", 33 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery')", 34 | "}\n" 35 | ], 36 | "jqueryVersionCheck": [ 37 | "+function ($) {", 38 | " 'use strict';", 39 | " var version = $.fn.jquery.split(' ')[0].split('.')", 40 | " if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {", 41 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')", 42 | " }", 43 | "}(jQuery);\n\n" 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /webui/root_controller.go: -------------------------------------------------------------------------------- 1 | package webui 2 | 3 | import ( 4 | "fmt" 5 | "html/template" 6 | "io/ioutil" 7 | "net/http" 8 | 9 | "github.com/jhillyerd/inbucket/config" 10 | "github.com/jhillyerd/inbucket/httpd" 11 | ) 12 | 13 | // RootIndex serves the Inbucket landing page 14 | func RootIndex(w http.ResponseWriter, req *http.Request, ctx *httpd.Context) (err error) { 15 | greeting, err := ioutil.ReadFile(config.GetWebConfig().GreetingFile) 16 | if err != nil { 17 | return fmt.Errorf("Failed to load greeting: %v", err) 18 | } 19 | 20 | return httpd.RenderTemplate("root/index.html", w, map[string]interface{}{ 21 | "ctx": ctx, 22 | "greeting": template.HTML(string(greeting)), 23 | }) 24 | } 25 | 26 | // RootStatus serves the Inbucket status page 27 | func RootStatus(w http.ResponseWriter, req *http.Request, ctx *httpd.Context) (err error) { 28 | smtpListener := fmt.Sprintf("%s:%d", config.GetSMTPConfig().IP4address.String(), 29 | config.GetSMTPConfig().IP4port) 30 | pop3Listener := fmt.Sprintf("%s:%d", config.GetPOP3Config().IP4address.String(), 31 | config.GetPOP3Config().IP4port) 32 | webListener := fmt.Sprintf("%s:%d", config.GetWebConfig().IP4address.String(), 33 | config.GetWebConfig().IP4port) 34 | return httpd.RenderTemplate("root/status.html", w, map[string]interface{}{ 35 | "ctx": ctx, 36 | "version": config.Version, 37 | "buildDate": config.BuildDate, 38 | "smtpListener": smtpListener, 39 | "pop3Listener": pop3Listener, 40 | "webListener": webListener, 41 | "smtpConfig": config.GetSMTPConfig(), 42 | "dataStoreConfig": config.GetDataStoreConfig(), 43 | }) 44 | } 45 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for Glyphicons data generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | 12 | module.exports = function generateGlyphiconsData(grunt) { 13 | // Pass encoding, utf8, so `readFileSync` will return a string instead of a 14 | // buffer 15 | var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); 16 | var glyphiconsLines = glyphiconsFile.split('\n'); 17 | 18 | // Use any line that starts with ".glyphicon-" and capture the class name 19 | var iconClassName = /^\.(glyphicon-[a-zA-Z0-9-]+)/; 20 | var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + 21 | '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; 22 | var glyphiconsYml = 'docs/_data/glyphicons.yml'; 23 | for (var i = 0, len = glyphiconsLines.length; i < len; i++) { 24 | var match = glyphiconsLines[i].match(iconClassName); 25 | 26 | if (match !== null) { 27 | glyphiconsData += '- ' + match[1] + '\n'; 28 | } 29 | } 30 | 31 | // Create the `_data` directory if it doesn't already exist 32 | if (!fs.existsSync('docs/_data')) { 33 | fs.mkdirSync('docs/_data'); 34 | } 35 | 36 | try { 37 | fs.writeFileSync(glyphiconsYml, glyphiconsData); 38 | } catch (err) { 39 | grunt.fail.warn(err); 40 | } 41 | grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); 42 | }; 43 | -------------------------------------------------------------------------------- /httpd/context.go: -------------------------------------------------------------------------------- 1 | package httpd 2 | 3 | import ( 4 | "net/http" 5 | "strings" 6 | 7 | "github.com/gorilla/mux" 8 | "github.com/gorilla/sessions" 9 | "github.com/jhillyerd/inbucket/smtpd" 10 | ) 11 | 12 | // Context is passed into every request handler function 13 | type Context struct { 14 | Vars map[string]string 15 | Session *sessions.Session 16 | DataStore smtpd.DataStore 17 | IsJSON bool 18 | } 19 | 20 | // Close the Context (currently does nothing) 21 | func (c *Context) Close() { 22 | // Do nothing 23 | } 24 | 25 | // headerMatch returns true if the request header specified by name contains 26 | // the specified value. Case is ignored. 27 | func headerMatch(req *http.Request, name string, value string) bool { 28 | name = http.CanonicalHeaderKey(name) 29 | value = strings.ToLower(value) 30 | 31 | if header := req.Header[name]; header != nil { 32 | for _, hv := range header { 33 | if value == strings.ToLower(hv) { 34 | return true 35 | } 36 | } 37 | } 38 | 39 | return false 40 | } 41 | 42 | // NewContext returns a Context for the given HTTP Request 43 | func NewContext(req *http.Request) (*Context, error) { 44 | vars := mux.Vars(req) 45 | sess, err := sessionStore.Get(req, "inbucket") 46 | if err != nil { 47 | if sess == nil { 48 | // No session, must fail 49 | return nil, err 50 | } 51 | // The session cookie was probably signed by an old key, ignore it 52 | // gorilla created an empty session for us 53 | err = nil 54 | } 55 | ctx := &Context{ 56 | Vars: vars, 57 | Session: sess, 58 | DataStore: DataStore, 59 | IsJSON: headerMatch(req, "Accept", "application/json"), 60 | } 61 | return ctx, err 62 | } 63 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/locale/ja.js: -------------------------------------------------------------------------------- 1 | //! moment.js locale configuration 2 | //! locale : japanese (ja) 3 | //! author : LI Long : https://github.com/baryon 4 | 5 | import moment from '../moment'; 6 | 7 | export default moment.defineLocale('ja', { 8 | months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), 9 | monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), 10 | weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), 11 | weekdaysShort : '日_月_火_水_木_金_土'.split('_'), 12 | weekdaysMin : '日_月_火_水_木_金_土'.split('_'), 13 | longDateFormat : { 14 | LT : 'Ah時m分', 15 | LTS : 'Ah時m分s秒', 16 | L : 'YYYY/MM/DD', 17 | LL : 'YYYY年M月D日', 18 | LLL : 'YYYY年M月D日Ah時m分', 19 | LLLL : 'YYYY年M月D日Ah時m分 dddd' 20 | }, 21 | meridiemParse: /午前|午後/i, 22 | isPM : function (input) { 23 | return input === '午後'; 24 | }, 25 | meridiem : function (hour, minute, isLower) { 26 | if (hour < 12) { 27 | return '午前'; 28 | } else { 29 | return '午後'; 30 | } 31 | }, 32 | calendar : { 33 | sameDay : '[今日] LT', 34 | nextDay : '[明日] LT', 35 | nextWeek : '[来週]dddd LT', 36 | lastDay : '[昨日] LT', 37 | lastWeek : '[前週]dddd LT', 38 | sameElse : 'L' 39 | }, 40 | relativeTime : { 41 | future : '%s後', 42 | past : '%s前', 43 | s : '数秒', 44 | m : '1分', 45 | mm : '%d分', 46 | h : '1時間', 47 | hh : '%d時間', 48 | d : '1日', 49 | dd : '%d日', 50 | M : '1ヶ月', 51 | MM : '%dヶ月', 52 | y : '1年', 53 | yy : '%d年' 54 | } 55 | }); 56 | 57 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/moment/src/locale/ar-tn.js: -------------------------------------------------------------------------------- 1 | //! moment.js locale configuration 2 | //! locale : Tunisian Arabic (ar-tn) 3 | 4 | import moment from '../moment'; 5 | 6 | export default moment.defineLocale('ar-tn', { 7 | months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), 8 | monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), 9 | weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), 10 | weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), 11 | weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), 12 | longDateFormat: { 13 | LT: 'HH:mm', 14 | LTS: 'HH:mm:ss', 15 | L: 'DD/MM/YYYY', 16 | LL: 'D MMMM YYYY', 17 | LLL: 'D MMMM YYYY HH:mm', 18 | LLLL: 'dddd D MMMM YYYY HH:mm' 19 | }, 20 | calendar: { 21 | sameDay: '[اليوم على الساعة] LT', 22 | nextDay: '[غدا على الساعة] LT', 23 | nextWeek: 'dddd [على الساعة] LT', 24 | lastDay: '[أمس على الساعة] LT', 25 | lastWeek: 'dddd [على الساعة] LT', 26 | sameElse: 'L' 27 | }, 28 | relativeTime: { 29 | future: 'في %s', 30 | past: 'منذ %s', 31 | s: 'ثوان', 32 | m: 'دقيقة', 33 | mm: '%d دقائق', 34 | h: 'ساعة', 35 | hh: '%d ساعات', 36 | d: 'يوم', 37 | dd: '%d أيام', 38 | M: 'شهر', 39 | MM: '%d أشهر', 40 | y: 'سنة', 41 | yy: '%d سنوات' 42 | }, 43 | week: { 44 | dow: 1, // Monday is the first day of the week. 45 | doy: 4 // The week that contains Jan 4th is the first week of the year. 46 | } 47 | }); 48 | 49 | -------------------------------------------------------------------------------- /themes/bootstrap/public/bower_components/jquery/src/ajax/script.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core", 3 | "../var/document", 4 | "../ajax" 5 | ], function( jQuery, document ) { 6 | 7 | // Install script dataType 8 | jQuery.ajaxSetup( { 9 | accepts: { 10 | script: "text/javascript, application/javascript, " + 11 | "application/ecmascript, application/x-ecmascript" 12 | }, 13 | contents: { 14 | script: /\b(?:java|ecma)script\b/ 15 | }, 16 | converters: { 17 | "text script": function( text ) { 18 | jQuery.globalEval( text ); 19 | return text; 20 | } 21 | } 22 | } ); 23 | 24 | // Handle cache's special case and crossDomain 25 | jQuery.ajaxPrefilter( "script", function( s ) { 26 | if ( s.cache === undefined ) { 27 | s.cache = false; 28 | } 29 | if ( s.crossDomain ) { 30 | s.type = "GET"; 31 | } 32 | } ); 33 | 34 | // Bind script tag hack transport 35 | jQuery.ajaxTransport( "script", function( s ) { 36 | 37 | // This transport only deals with cross domain requests 38 | if ( s.crossDomain ) { 39 | var script, callback; 40 | return { 41 | send: function( _, complete ) { 42 | script = jQuery( "