Code Monkey home page Code Monkey logo

nextcloud-user-ispconfig's Introduction

User ISPCONFIG

Authenticate nextcloud users against ISPConfig Mailuser API

NOT ACTIVELY MAINTAINED

Unfortunatly my personal situation has changed and no longer leaves me time to actively maintain this project.
If you want to help, you can always send pull requests. I will still review them and publish as updates to the store.

Or, if you are willing to overtake the project as maintainer, please contact me.

Installation

Normal installation (recommended)

Just install it from your nextclouds application catalogue.

Development version

Clone this repository into your nextcloud apps directory:

cd apps/
git clone https://github.com/SpicyWeb-de/nextcloud-user-ispconfig.git user_ispconfig

Install it as usual from CLI or admins app list.

Configuration

Prerequisites

This authentication method uses ISPConfigs SOAP API. Thus it requires credentials for a legitimate remote api user.

In your ISPConfig 3 panel go to System -> Remote Users and create a new user with permissions for Customer Functions, Server Functions, E-Mail User Functions.

Along with that, you have to provide the SOAP API Location and Uri.
If you didn't modify it, these should be:

Basic configuration

To finally enable authentication against the ISPConfig 3 API you need to add it as user backend to your nextclouds config file in config/config.php.
Using this basic configuration will allow any mail user to authenticate with E-Mail address and password and will create a new nextcloud account with default settings on first login.

<?php
$CONFIG = array(
//  [ ... ],
    'user_backends' => array(
        0 => array(
            'class' => 'OC_User_ISPCONFIG',
            'arguments' =>
                array(
                    0 => 'https://YOUR.PANEL.FQDN:PORT/remote/index.php',
                    1 => 'https://YOUR.PANEL.FQDN:PORT/remote/',
                    2 => 'YOUR_REMOTE_API_USER',
                    3 => 'YOUR_REMOTE_API_PASS',
                ),
        ),
    )
);

Extended configuration

The authentication class takes a 5th argument on index 4, allowing further configuration for your needs.

Global settings

Option Type Default Description
map_uids boolean true Use uid mappings as described below or fall back to ISPConfig mailuser login
allowed_domains [string] false Whitelist domains for login. Only accounts from this domains allowed, if set
default_quota string false Quota description (500 M, 2 G, ...) overriding system default for users authenticated by ISPConfig
default_groups [string] false Auto-add new users to these groups on first login
preferences [[string]] false Default settings to write for other apps on first login, see Preferences for other apps

Example:

<?php
$CONFIG = array(
//  [ ... ],
    'user_backends' => array(
        0 => array(
            'class' => 'OC_User_ISPCONFIG',
            'arguments' =>
                array(
                //  [ ... ],
                    4 => array(
                        'allowed_domains' => array(
                            0 => 'domain-one.net',
                            1 => 'domain-two.com',
                            2 => 'doe.com',
                        ),
                        'default_quota' => "50M",
                        'default_groups' => array('users'),
                    )
                ),
        ),
    )
);

Per domain settings

As you can override system defaults for this authentication method, you also can override per-domain using the domain_config option.

Option Type Default Description
quota string false Quota description (500 M, 2 G, ...) for users of this domain
groups [string] false Auto-add new users of this domain to these groups on first login
bare-name boolean false Authenticate users of this domain by their mailbox name instead of the regular mail address (only for map_uids == true)
uid-prefix string false Identify users by prefixed mailbox name instead of regular mail address (only for map_uids == true)
uid-suffix string false Identify users by suffixed mailbox name instead of regular mail address (only for map_uids == true)
preferences [[string]] false Default settings to set for other apps on first login, see Preferences for other apps
Example:
<?php
$CONFIG = array(
//  [ ... ],
    'user_backends' => array(
        0 => array(
            'class' => 'OC_User_ISPCONFIG',
            'arguments' =>
                array(
                    //  [ ... ],
                    4 => array(
                        //  [ ... ],
                        'domain_config' => array(
                            'domain-one.net' => array(
                                'quota' => '1G',
                                'groups' => array('users', 'company'),
                                'bare-name' => true,
                            ),
                            'domain-two.com' => array(
                                'quota' => '200M',
                            ),
                            'doe.com' => array(
                                'uid-suffix' => '.doe',
                                'quota' => '2G',
                                'groups' => array('users', 'family')
                            )
                        )
                    )
                ),
        ),
    )
);

About Login Names

There are two main options to configure how your users login to your cloud:

  • using the mail login name as set in ISPConfig (mailbox or alternative loginname if you allow customers to set those)
    set "map_uids" => false in your configuration to use this options
    Your users have to login using their usual credentials known from logging in to their mailboxes, nextcloud UIDs will be equivalent to ISPConfig login names.
  • using email address or mapped usernames set "map_uids" => true to enable this feature (on by default for legacy installations)
    Your users can login using their email address or a login name generated by mappings you defined in your config.
    See detailled description and options for UID mapping below.
    Nextcloud UIDs will be equivalent to the mapped usernames.

Username (UID) Mapping

There are three options to map your users mail adresses to cloud login names: bare-name, uid-prefix, uid-suffix

Normally users would sign in using their mail address, like [email protected].
This results in a ugly federated cloud ID like awesomeuser@[email protected]

Like it? Me neither.

The following options (shown in examples above) are evaluated in this exact order per domain. The first one wins, the other don't matter.
It affects how the nextcloud internal user id is built. So DONT change in production after your first users signed in!

bare-name

Users from domain-one.net are allowed to login with their mailbox name.
Instead of [email protected] your boss uses just big.boss as login name.

Resulting in federated cloud ID [email protected]

You can set this option for multiple domains. But be careful to have only trustworthy admins configuring accounts for these domains. A user having the same mailbox name for a different domain could hijack the cloud account.

uid-prefix

Users from a domain with this option set authenticate with their mailbox name prefixed by this string.
Instead of [email protected] the user signes on with prefix-user.

Resulting in federated cloud ID prefix-[email protected]

uid-suffix

Users from domain doe.com authenticate with their mailbox name suffixed by .doe.
Instead of [email protected] the user signes on with john.doe.

Resulting in federated cloud ID john.doe@your-cloud.fqdn

Preferences for other apps

The preferences key is used to set default preferences for other apps in your cloud.
It is a 2-dimensional array with the app name as 1st level key, the configkey as 2nd level key and finally the value as string (see code example).

Sometimes you need to set explicit preferences for your users for several apps.
The chat application JSXC for example works great preconfigured, as long as all users have an accounnt on the same XMPP host with login name equivalent to their Jabber ID.
That doesn't work well with username mapping and users from different domains.

Instead, you can look at the table preferences in the nextcloud database, extract the config option to set for the app and define default preferences to set for every new user global or in domain scope.

mysql> select * from oc_preferences where appid="ojsxc";

userid appid configkey configvalue
john.doe ojsxc options {"mam":{"enable":"true"},"loginForm":{"enable":"true","jid":"#user","pass":"#password","onConnecting":"quiet","onConnected":"submit","onAuthFail":"submit","attachIfFound":"true","ifFound":"force","startMinimized":"true"},"xmpp":{"username":"john","domain":"doe.com","resource":"Cloud Chat"}}

To make it more generic (original contains mailbox and domain name), you can substitude with the following placeholders:

Placeholder Value
%UID% Mapped user id john.doe
%MAILBOX% Users Mailbox name john
%DOMAIN% Users Domain name doe.com

To auto-configure for example JXSC for your users, you could add the following preferences object either on global or domain scope:

'preferences' => array(
    // 1st level key: appid of the app
    'ojsxc' => array(
        // 2nd level key: configkey to set for the app
        // and the value to set as string
        'options' => '{"mam":{"enable":"true"},"loginForm":{"enable":"true","jid":"#user","pass":"#password","onConnecting":"quiet","onConnected":"submit","onAuthFail":"submit","attachIfFound":"true","ifFound":"force","startMinimized":"true"},"xmpp":{"username":"%MAILBOX%","domain":"%DOMAIN%","resource":"Family Chat"}}'
    )
),

Troubleshooting

Always get 'Invalid Password'

Check for php-soap

Check your nextclouds log messages for ERROR: PHP soap extension is not installed or not enabled
If this message occours, ensure you have the PHP Soap extension installed and activated.

You can check, if soap is activated by grepping your etc folder like this (adjust folder name to your environment):

grep -r ^extension=soap /etc/php

If not activated, make sure you have the soap extension installed and activate it.

On debian-like systems for example install the package php-soap and activate it afterwards by entering

apt-get install php-soap
phpenmod soap
service apache2 restart

Thanks to

  • Christian Weiske, UserExternal extension as template for lib/base.php

nextcloud-user-ispconfig's People

Contributors

conrad784 avatar detoxhby avatar qroac avatar volkarts-dev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

nextcloud-user-ispconfig's Issues

Unexpected error during account creation

I'm completely new to NC and this app. I have ISPConfig working with Roundcube via a plugin that uses the SOAP interface. So that interface and the user/password all work. I'm looking to replace RC with the NC mail app. Note the map_uids=false below. I'm trying to connect as follows:
image
I set IMAP to 993 and SMTP to 465. For the IMAP user and SMTP user I've tried both the loginID and the email address. The user/password for the mailbox are correct. I'm using them successfully from Outlook.

In config.php I have debug logging active. The stream of log detail includes the following:

"app":"PHP","method":"POST", "url":"/index.php/apps/mail/api/accounts",
"message":{"Exception":"Error","Message":"stream_socket_client(): unable to connect
to ssl://mail2.domain.tld:143 (Unknown error) at
/var/www/aaa/bbb/ccc/ddd/apps/mail/vendor/pear-pear.horde.org/Horde_Socket_Client/Horde/Socket/Client.php#293","Code":0

Note again, despite that error, I set the IMAP port to 993, not 143. And I didn't include a mail2 subdomain in my specs so I don't know where that comes from.

"url":"/index.php/apps/mail/api/accounts","message":{"Exception":"Error",
"Message":"stream_socket_client(): Failed to enable crypto at
/var/www/aaa/bbb/ccc/ddd/apps/mail/vendor/pear-pear.horde.org/Horde_Socket_Client/Horde/Socket/Client.php#293","Code":0
"url":"/index.php/apps/mail/api/accounts","message":{"Exception":"Error",
"Message":"steam_socket_client(): SSL operation failed with code 1.
OpenSSL Error messages:\nerror:1408F10B:SSL routines:ssl3_get_record:wrong version number
at ...same line...

That's the same line, different errors.

"method":"POST","url":"/index.php/apps/mail/api/accounts","message":"Test-Account-Failed: my_nc_user_id,
my.domain, 993, [email protected], none -> Error connecting to mail server.",...
"method":"GET","url":"/ocs/v2.php/apps/notifications/api/v2/notifications",
"message":"User backend OC_User_ISPCONFIG not found.", ...

I'm sure there is more info in the log but it's tough to find with so much detail.
Based on a few of these errors I'm guessing there is a missing dependency that does crypo - but no clue which one is missing. I'll look into that until I hear back from you.

I do not see any ISPConfig log activity when clicking connect on the mail app. I'm not sure when your app/plugin activates. I would be happy to set debug tracing wherever you suggest and to report back with any logs. I haven't looked at your code. Sorry - no time, I've been playing user all day on this project. But I will work with you to find out if/when the connection is made with ISPConfig and then what happens after.

Thanks!

NC 20
nui v0.4.7 Installed from NC app UI
ISPConfig 3.2
Ubuntu 20

'user_backends' => array(
      0 => array(
          'class' => 'OC_User_ISPCONFIG',
          'arguments' =>
              array(
                  0 => 'https://zz.domain.tld:8080/remote/index.php',
                  1 => 'https://zz.domain.tld:8080/remote/',
                  2 => 'soap_user',
                  3 => 'soap_psw',
                  4 => array(
                         'map_uids' => false
                       )
              ),
      ),
)

Curl error 7

I clone this repository in my apps directory, but when I try to install the app it gives me this error:
cURL error 7: Failed to connect to spicyhub.de port 443: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

Compatibility to NC20

Hi, since NC20 is now in the production branch, I wonder if you will be releasing a compatible version of this plugin.

change user's user backend

Hello,

I'm using your tool for a small, privately used nextcloud instance. It works really fine. Except for two users.

I can log in with the user's credentials but after some time I see the log in screen again
I now saw that the users I'm talking about have a user backend of "Database". The other users which have no issues use OC_User_ISPCONFIG.

My question now is how I can get those users converted to also use OC_User_ISPCONFIG as their user backend? For sure I don't want to lose the data of the users. The behaviour should be like nothing changed but they can use their ISPconfig password without being logged off all the time.

It would be absolutely awesome to get some ideas here. :-)

Regards

Marco

Error: Class "OC_DB" not found

Hello all,

i hope anyone can help with my problem.

I updated my Nextcloud to V26 and now i cant see my users from ISPconfig.

My error message when i run "occ user:list":

`#10 {main}root@cloud:/var/www/nextcloud# sudo -u www-data php8.1 /var/www/nextcloud/occ user:list

An unhandled exception has been thrown:

Error: Class "OC_DB" not found in /var/www/nextcloud/apps/user_ispconfig/lib/base.php:140
Stack trace:

#0 /var/www/nextcloud/lib/private/User/Manager.php(306): OCA\user_ispconfig\Base->getUsers()

#1 /var/www/nextcloud/core/Command/User/ListCommand.php(77): OC\User\Manager->search()

#2 /var/www/nextcloud/3rdparty/symfony/console/Command/Command.php(255): OC\Core\Command\User\ListCommand->execute()

#3 /var/www/nextcloud/core/Command/Base.php(177): Symfony\Component\Console\Command\Command->run()

#4 /var/www/nextcloud/3rdparty/symfony/console/Application.php(1009): OC\Core\Command\Base->run()

#5 /var/www/nextcloud/3rdparty/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand()

#6 /var/www/nextcloud/3rdparty/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()

#7 /var/www/nextcloud/lib/private/Console/Application.php(215): Symfony\Component\Console\Application->run()

#8 /var/www/nextcloud/console.php(100): OC\Console\Application->run()

#9 /var/www/nextcloud/occ(11): require_once('...')`

Output from Nextcloud.log:

{"reqId":"ea1BN5KT4szUQR5CL57N","level":3,"time":"2023-04-23T18:13:08+02:00","remoteAddr":"","user":"admin","app":"no app in context","method":"GET","url":"/ocs/v2.php/cloud/users/details?offset=0&limit=25&search=","message":"Class "OC_DB" not found in file '/var/www/nextcloud/apps/user_ispconfig/lib/base.php' line 140","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0","version":"26.0.1.1","exception":{"Exception":"Exception","Message":"Class "OC_DB" not found in file '/var/www/nextcloud/apps/user_ispconfig/lib/base.php' line 140","Code":0,"Trace":[{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":183,"function":"dispatch","class":"OC\AppFramework\Http\Dispatcher","type":"->"},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":315,"function":"main","class":"OC\AppFramework\App","type":"::"},{"file":"/var/www/nextcloud/ocs/v1.php","line":64,"function":"match","class":"OC\Route\Router","type":"->"},{"file":"/var/www/nextcloud/ocs/v2.php","line":23,"args":["/var/www/nextcloud/ocs/v1.php"],"function":"require_once"}],"File":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","Line":169,"Previous":{"Exception":"Error","Message":"Class "OC_DB" not found","Code":0,"Trace":[{"file":"/var/www/nextcloud/lib/private/User/Manager.php","line":306,"function":"getUsers","class":"OCA\user_ispconfig\Base","type":"->"},{"file":"/var/www/nextcloud/apps/provisioning_api/lib/Controller/UsersController.php","line":186,"function":"search","class":"OC\User\Manager","type":"->"},{"file":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","line":230,"function":"getUsersDetails","class":"OCA\Provisioning_API\Controller\UsersController","type":"->"},{"file":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","line":137,"function":"executeController","class":"OC\AppFramework\Http\Dispatcher","type":"->"},{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":183,"function":"dispatch","class":"OC\AppFramework\Http\Dispatcher","type":"->"},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":315,"function":"main","class":"OC\AppFramework\App","type":"::"},{"file":"/var/www/nextcloud/ocs/v1.php","line":64,"function":"match","class":"OC\Route\Router","type":"->"},{"file":"/var/www/nextcloud/ocs/v2.php","line":23,"args":["/var/www/nextcloud/ocs/v1.php"],"function":"require_once"}],"File":"/var/www/nextcloud/apps/user_ispconfig/lib/base.php","Line":140},"CustomMessage":"--"}}`

Thanks to all users

Best Regards from Austria

Doc improvements

Please see: ISPConfig forum post: "Collaborate to update Nextcloud + ISPConfig HowTo?"

Would you like to exchange notes that lead to more detailed docs here and elsewhere?

Nextcloud 28 Support

Hi

Thanks a lot for your work!

Is there a realease planed for Nextcloud 28?

gruss ivo

"Internal server error" on login new NC user

Hello,
I'm Frensh, sorry for my English.
This app is definitely the glue that was missing from my infrastructure, really thanks if it works.

I installed the app via git, then activated it in NC

~web2/web (master*) # cd apps/
~web2/web/apps (master*) # git clone https://github.com/SpicyWeb-de/nextcloud-user-ispconfig.git user_ispconfig`
~web2/web/apps (master*) # ls -l user_ispconfig
total 32
-rw-r--r-- 1 web2 client1  4118 Feb 20 22:10 CHANGELOG.md
-rw-r--r-- 1 web2 client1 11704 Feb 20 22:10 README.md
drwxr-xr-x 2 web2 client1  4096 Feb 20 22:29 appinfo
drwxr-xr-x 2 web2 client1  4096 Feb 20 22:10 img
drwxr-xr-x 3 web2 client1  4096 Feb 20 22:28 lib

And /var/www/clients/client1/web2/web/config/config.php

    0 => array(
        'class' => 'OC_User_ISPCONFIG',
        'arguments' =>
            array(
                0 => 'https://localhost:8080/remote/index.php',
                1 => 'https://localhost:8080/remote/',
                2 => 'c1_nextcloud',
                3 => 'password',
            ),
    ),
)

I have a remote user:
Screenshot_20220221_010604

I have a valid SSL certificate for the ISPConfig API
Screenshot_20220221_001929

I have no email users in NC
Screenshot_20220221_001635

I have two email addresses in ISPConfig that I want to open in NC
Screenshot_20220221_001818

I get an error message when I log in with the users root@xxx (with the right or wrong password).
Screenshot_20220221_011007

I have no errors in /var/log/apache2/access.log

I have this in https://cloud.xxx/index.php/settings/admin/logging

SoapFault: Could not connect to host

<<closure>>

SoapClient->__doRequest()

/var/www/clients/client1/web2/web/apps/user_ispconfig/lib/ispconfig_soap.php - line 73:

SoapClient->__call()

/var/www/clients/client1/web2/web/apps/user_ispconfig/lib/user_ispconfig.php - line 174:

OCA\user_ispconfig\ISPConfig_SOAP->connectSoap()

/var/www/clients/client1/web2/web/apps/user_ispconfig/lib/user_ispconfig.php - line 113:

OC_User_ISPCONFIG->loginWithUIDMapping("*** sensiti ... *")

/var/www/clients/client1/web2/web/lib/private/User/Manager.php - line 258:

OC_User_ISPCONFIG->checkPassword("*** sensiti ... *")

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/UidLoginCommand.php - line 49:

OC\User\Manager->checkPasswordNoLogging("*** sensiti ... *")

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/ALoginCommand.php - line 40:

OC\Authentication\Login\UidLoginCommand->process()

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/UserDisabledCheckCommand.php - line 58:

OC\Authentication\Login\ALoginCommand->processNextOrFinishSuccessfully()

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/ALoginCommand.php - line 40:

OC\Authentication\Login\UserDisabledCheckCommand->process()

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/PreLoginHookCommand.php - line 53:

OC\Authentication\Login\ALoginCommand->processNextOrFinishSuccessfully()

/var/www/clients/client1/web2/web/lib/private/Authentication/Login/Chain.php - line 108:

OC\Authentication\Login\PreLoginHookCommand->process()

/var/www/clients/client1/web2/web/core/Controller/LoginController.php - line 329:

OC\Authentication\Login\Chain->process()

/var/www/clients/client1/web2/web/lib/private/AppFramework/Http/Dispatcher.php - line 217:

OC\Core\Controller\LoginController->tryLogin("*** sensiti ... *")

/var/www/clients/client1/web2/web/lib/private/AppFramework/Http/Dispatcher.php - line 126:

OC\AppFramework\Http\Dispatcher->executeController()

/var/www/clients/client1/web2/web/lib/private/AppFramework/App.php - line 157:

OC\AppFramework\Http\Dispatcher->dispatch()

/var/www/clients/client1/web2/web/lib/private/Route/Router.php - line 302:

OC\AppFramework\App::main()

/var/www/clients/client1/web2/web/lib/base.php - line 1006:

OC\Route\Router->match()

/var/www/clients/client1/web2/web/index.php - line 36:

OC::handleRequest()

How can I find out what the problem is? "ID de la demande"?

Thanks again for your time.

"The appinfo/database.xml file is not longer supported" after upgrade to NC 22 the app can't be activated

Hi,

after I upgraded to NC 22 I wanted to re-activate the nextcloud-user-ispconfig app but got the following error message:
"The appinfo/database.xml file is not longer supported."

Could you please fix the app to meet the requirements of NC22?
I think this is a great app and was working for me flawlessly with ISPConfig ever since I installed it... !

I have currently the latest, 0.4.9 version installed on the recently upgraded NC 22 system.

Thank you,
Feri

Per domain settings: Auto-add new users of domain to groups not working

Hi.

I tried to copy your examle configuration for per-domain settings. The login-auth against ispconfig works as expected, but the domain-user is not added to the wanted configured groups after first login.
My nextcloud version is: 21.0.5
My ispConfig version is: 3.2.4
PHP Version: 7.4
OS: Debian 11

I added my test config. Is this correct and should this work?
Must the groups exist before first login of a domain user, or will they be created by nextcloud-user-ispconfig automatically? I tried both, but the group-add feature will not work.

'user_backends' =>
array (
0 =>
array (
'class' => 'OC_User_ISPCONFIG',
'arguments' =>
array (
0 => 'https://my.ispconfig.tld:8080/remote/index.php',
1 => 'https://my.ispconfig.tld:8080/remote/',
2 => 'nxtcloud',
3 => 'ispuserpassword',
4 =>
array (
'allowed_domains' =>
array (
0 => 'mydomain.com',
1 => 'fsdffdsdffsdf.com',
),
),
'map_uids' => 'false',
'domain_config' =>
array (
'mydomain.com' =>
array (
'quota' => '2G',
'groups' =>
array (
0 => 'mydomaingroup',
1 => 'users',
),
),
),
),
),
),
'updater.secret' => '$REMOVED',
);

App signature contains references to .git files

After update to NextCloud 22, the user_ispconfig app fails to pass signature checking in https://[cloud domain]/settings/admin/overview with missing files because appinfo/signature.json contains hash-es of .git directory files.
Those hash-es should be included only for development version but not for NextCloud app catalog.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.