Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LDAP integration #3663

Closed
aaronlott opened this issue Jun 13, 2017 · 7 comments
Closed

LDAP integration #3663

aaronlott opened this issue Jun 13, 2017 · 7 comments

Comments

@aaronlott
Copy link

Expected Behavior (or desired behavior if a feature request)

Setup LDAP integration and sync users and password.


Actual Behavior

Snipe IT not able to connect to LDAP environment. Getting error "Invalid Credentials" or "Can't contact LDAP server".


Please confirm you have done the following before posting your bug report:


Please provide answers to these questions before posting your bug report:

  • Version of Snipe-IT you're running - 3.6.4 build 12 (gf7e4fca)
  • What OS and web server you're running Snipe-IT on - Centos 7 Apache/2.4.6
  • What method you used to install Snipe-IT (install.sh, manual installation, docker, etc) - install.sh
  • WITH DEBUG TURNED ON, if you're getting an error in your browser, include that error
  • What specific Snipe-IT page you're on, and what specific element you're interacting with to trigger the error

image

  • If a stacktrace is provided in the error, include that too.

  • Any errors that appear in your browser's error console.
    image

  • Confirm whether the error is reproduceable on the demo.

  • Include any additional information you can find in app/storage/logs and your webserver's logs. - Nothing related to LDAP in laravel.log

  • Include what you've done so far in the installation, and if you got any error messages along the way.
    Server contains php56u-ldap. The only thing I thought was needed was to point to the ldap server address and provide valid AD credentials to authenticate with.

  • Indicate whether or not you've manually edited any data directly in the database - I have not edited the database directly.

@snipe
Copy link
Owner

snipe commented Jun 13, 2017

Need app log information to now what the 500 error is.

@aaronlott
Copy link
Author

[2017-06-13 08:42:19] production.ERROR: exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php:347
Stack trace:
#0 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php(263): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('')
#1 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php(106): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array)
#2 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php(63): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array)
#3 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php(58): Swift_Mime_Headers_MailboxHeader->setFieldBodyModel(Array)
#4 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php(68): Swift_Mime_SimpleHeaderFactory->createMailboxHeader('Reply-To', Array)
#5 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php(268): Swift_Mime_SimpleHeaderSet->addMailboxHeader('Reply-To', Array)
#6 /var/www/html/snipeit/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php(245): Swift_Mime_SimpleMessage->setReplyTo(Array)
#7 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Mail/Message.php(137): Swift_Mime_SimpleMessage->addReplyTo(NULL, NULL)
#8 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Mail/Message.php(121): Illuminate\Mail\Message->addAddresses(NULL, NULL, 'ReplyTo')
#9 /var/www/html/snipeit/app/Http/Controllers/AssetsController.php(689): Illuminate\Mail\Message->replyTo(NULL, NULL)
#10 [internal function]: App\Http\Controllers\AssetsController->App\Http\Controllers{closure}(Object(Illuminate\Mail\Message))
#11 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(403): call_user_func(Object(Closure), Object(Illuminate\Mail\Message))
#12 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(163): Illuminate\Mail\Mailer->callMessageBuilder(Object(Closure), Object(Illuminate\Mail\Message))
#13 /var/www/html/snipeit/bootstrap/cache/compiled.php(6329): Illuminate\Mail\Mailer->send('emails.checkin-...', Array, Object(Closure))
#14 /var/www/html/snipeit/app/Http/Controllers/AssetsController.php(691): Illuminate\Support\Facades\Facade::__callStatic('send', Array)
#15 /var/www/html/snipeit/app/Http/Controllers/AssetsController.php(691): Illuminate\Support\Facades\Mail::send('emails.checkin-...', Array, Object(Closure))
#16 [internal function]: App\Http\Controllers\AssetsController->postCheckin(Object(App\Http\Requests\AssetCheckinRequest), '1', 'user')
#17 /var/www/html/snipeit/bootstrap/cache/compiled.php(9424): call_user_func_array(Array, Array)
#18 /var/www/html/snipeit/bootstrap/cache/compiled.php(9486): Illuminate\Routing\Controller->callAction('postCheckin', Array)
#19 /var/www/html/snipeit/bootstrap/cache/compiled.php(9466): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\AssetsController), Object(Illuminate\Routing\Route), 'postCheckin')
#20 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#21 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#22 /var/www/html/snipeit/app/Http/Middleware/Authenticate.php(45): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#23 [internal function]: App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#25 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#26 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#27 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#28 /var/www/html/snipeit/bootstrap/cache/compiled.php(9948): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#29 /var/www/html/snipeit/bootstrap/cache/compiled.php(9467): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#30 /var/www/html/snipeit/bootstrap/cache/compiled.php(9454): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\AssetsController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'postCheckin')
#31 /var/www/html/snipeit/bootstrap/cache/compiled.php(8524): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'App\Http\Contro...', 'postCheckin')
#32 /var/www/html/snipeit/bootstrap/cache/compiled.php(8511): Illuminate\Routing\Route->runController(Object(Illuminate\Http\Request))
#33 /var/www/html/snipeit/bootstrap/cache/compiled.php(8225): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#34 [internal function]: Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#35 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#36 /var/www/html/snipeit/app/Http/Middleware/CheckPermissions.php(28): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#37 [internal function]: App\Http\Middleware\CheckPermissions->handle(Object(Illuminate\Http\Request), Object(Closure), 'assets.checkin')
#38 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#39 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#40 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#41 /var/www/html/snipeit/app/Http/Middleware/Authenticate.php(45): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#42 [internal function]: App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#44 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#45 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#46 /var/www/html/snipeit/app/Http/Middleware/CheckForTwoFactor.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#47 [internal function]: App\Http\Middleware\CheckForTwoFactor->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#49 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#50 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#51 /var/www/html/snipeit/app/Http/Middleware/CheckLocale.php(42): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#52 [internal function]: App\Http\Middleware\CheckLocale->handle(Object(Illuminate\Http\Request), Object(Closure))
#53 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#54 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#55 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#56 /var/www/html/snipeit/bootstrap/cache/compiled.php(3225): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#57 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#58 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#59 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#60 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#61 /var/www/html/snipeit/bootstrap/cache/compiled.php(13213): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#62 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#63 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#64 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#65 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#66 /var/www/html/snipeit/bootstrap/cache/compiled.php(13150): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#67 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#68 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#69 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#70 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#71 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#72 /var/www/html/snipeit/bootstrap/cache/compiled.php(9948): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#73 /var/www/html/snipeit/bootstrap/cache/compiled.php(8226): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#74 /var/www/html/snipeit/bootstrap/cache/compiled.php(8217): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#75 /var/www/html/snipeit/bootstrap/cache/compiled.php(8207): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#76 /var/www/html/snipeit/bootstrap/cache/compiled.php(2419): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#77 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request))
#78 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#79 /var/www/html/snipeit/app/Http/Middleware/CheckForDebug.php(25): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#80 [internal function]: App\Http\Middleware\CheckForDebug->handle(Object(Illuminate\Http\Request), Object(Closure))
#81 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#82 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#83 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#84 /var/www/html/snipeit/vendor/fideloper/proxy/src/TrustProxies.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#85 [internal function]: Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#86 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#87 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#88 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#89 /var/www/html/snipeit/app/Http/Middleware/CheckForSetup.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#90 [internal function]: App\Http\Middleware\CheckForSetup->handle(Object(Illuminate\Http\Request), Object(Closure))
#91 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#92 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#93 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#94 /var/www/html/snipeit/app/Http/Middleware/NosniffGuard.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#95 [internal function]: App\Http\Middleware\NosniffGuard->handle(Object(Illuminate\Http\Request), Object(Closure))
#96 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#97 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#98 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#99 /var/www/html/snipeit/app/Http/Middleware/XssProtectHeader.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#100 [internal function]: App\Http\Middleware\XssProtectHeader->handle(Object(Illuminate\Http\Request), Object(Closure))
#101 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#102 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#103 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#104 /var/www/html/snipeit/app/Http/Middleware/FrameGuard.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#105 [internal function]: App\Http\Middleware\FrameGuard->handle(Object(Illuminate\Http\Request), Object(Closure))
#106 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#107 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#108 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#109 /var/www/html/snipeit/bootstrap/cache/compiled.php(13474): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#110 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#111 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#112 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#113 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#114 /var/www/html/snipeit/bootstrap/cache/compiled.php(11964): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#115 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#116 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#117 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#118 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#119 /var/www/html/snipeit/vendor/misterphilip/maintenance-mode/src/MisterPhilip/MaintenanceMode/Http/Middleware/CheckForMaintenanceMode.php(145): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#120 [internal function]: MisterPhilip\MaintenanceMode\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#121 /var/www/html/snipeit/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, Array)
#122 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#123 /var/www/html/snipeit/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#124 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#125 /var/www/html/snipeit/bootstrap/cache/compiled.php(9948): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#126 /var/www/html/snipeit/bootstrap/cache/compiled.php(2366): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#127 /var/www/html/snipeit/bootstrap/cache/compiled.php(2350): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#128 /var/www/html/snipeit/public/index.php(60): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#129 {main}

@aaronlott
Copy link
Author

I'm an idiot. The issue was related to the Bind User Name; I was putting AD credentials not LDAP. Now that I have the initial issue resolved, I am running into an issue of settings reverting back to old settings when I go to edit the LDAP Settings. This issue is making me re-enter system info every time I want to make a change. Any Idea?

@alex-chan
Copy link

I have the same issue, when user login, the app send a bindRequest message with user's username instead of LDAP username and password. So I get a error

@snipe
Copy link
Owner

snipe commented Jun 16, 2017

This issue is making me re-enter system info every time I want to make a change. Any Idea?

Honestly, no clue. Check your settings table and tell me how many records you have in there. (There should only be one, but if someone copied the record to save it for later reverting, it might get weird. But we haven't heard of anyone else having this Settings save problem. Is it giving you an error on save? If you turn debugging on and save, are there any errors in the log?

@alex-chan
Copy link

I found why I cannot login with LDAP: when user login , the system will bindRequest use Base Bind DN instead of LDAP Bind Username, which is wrong

@snipe snipe added the ldap label Aug 22, 2017
@stale
Copy link

stale bot commented Jan 20, 2018

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions!

@stale stale bot added the stale label Jan 20, 2018
@stale stale bot closed this as completed Jan 27, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants