GithubHelp home page GithubHelp logo

ircanywhere / ircanywhere Goto Github PK

View Code? Open in Web Editor NEW
733.0 733.0 69.0 6.35 MB

IRCAnywhere web based multi-user IRC bouncer built for teams

Home Page: http://ircanywhere.com

License: GNU General Public License v2.0

JavaScript 95.80% CSS 2.30% HTML 1.89% Shell 0.01% Batchfile 0.01%

ircanywhere's Introduction

IRCAnywhere TravisBuild

IRCAnywhere is an open source web based IRC bouncer application written in javascript. It's designed to be a free alternative to IRCCloud. Unlike IRCCloud where you have little control over uptime and the privacy of your users, IRCAnywhere aims to give the control to you.

http://ircanywhere.com/img/banner1.png

Full documentation for IRCAnywhere is available at http://ircanywhere.readthedocs.org/

Release v0.2-beta

Release v0.2-beta is the second installment of IRCAnywhere, which includes a large amount of new features and bug fixes since the previous release, v0.2-alpha. This release contains non backwards compatible database changes, when starting the server, it will warn you about this and advise a clean out of a number of collections channelUsers and events to ensure that nothing breaks.

History

IRCAnywhere has been around for a while, and was first opened to the public as a proprietary service back in 2012. It got open sourced in May, 2013 and we quickly realized that it wasn't as simple and stable as it should be. Recently IRCAnywhere has undergone a massive rewrite completely from the ground up with some fundamental changes to the way it previously worked.

Installing IRCAnywhere

Getting IRCAnywhere

You can either clone the github repository, or install from the 0.2-alpha release. However a number of stability changes have been made since last release so the development branch is usually the most stable. To clone the development branch:

$ git clone https://github.com/ircanywhere/ircanywhere.git
$ cd ircanywhere
$ git checkout development

or for 0.2-alpha:

$ wget https://github.com/ircanywhere/ircanywhere/archive/v0.2-alpha.tar.gz
$ tar xvf v0.2-alpha.tar.gz
$ cd ircanywhere-0.2-alpha

Pre-requisites

Before we start, make sure you have Node.js and Npm installed.

Install Script

The install script will automatically install MongoDB if needed, download node dependencies, start MongoDB correctly, create a default config file and compile the client side files.

Note that the install script is only available if you downloaded the development version of IRCAnywhere. Note On windows mongodb has to be installed and started manually before running the install script.

To run the install script, type this command:

$ ./install.sh

On windows the command to start install is:

> install.bat

If you already have MongoDB installed but not set up correctly with Oplog tailing, the script can do that for you as well, simply run:

$ sudo ./install.sh

If this goes through with no errors you can skip to the configuration file section.

Manually Installing

IRCAnywhere uses MongoDB for storage. For installation instructions, see the installing MongoDB section in the documentation.

We need to first install Node dependencies:

$ npm install

Next we'll build the client source:

$ npm run gulp

Finally, rename the sample configuration file config.example.json to config.json.

HTTPS

IRCAnywhere can also be served via HTTPS. Setting it up involves little more than editing the configuration file and setting the ssl property to true. Once this is done you will need to add the following certificate files to private/certs

  • private/certs/key.pem
  • private/certs/cert.pem

Configuration File

The sample configuration file has comments describing every property. A few items will need to be changed for a production environment such as the ip address and port. You'll need to include a smtp url if you want to be able to send emails out (forgot password links wont work without emails).

Running

There are multiple ways you can run IRCAnywhere, you probably want to run it detaching from the console so it runs on the background as a daemon, you can do that with the following commands:

$ npm start

or

$ node . start

To run attached to the console, so you can easily see console logs, use:

$ node . run

Note that the above commands wont restart the service when an exception occurs. To do this you're going to want to respond to signals to restart if the system crashes or gets killed for some other reason. Traditionally node applications are ran with forever, however there is a strange case causing irc-factory to reboot when the parent restarts which loses our ability to detach from IRC connections keeping them online between restarts, this is not good.

You can use a program called mon to keep the process running. You should use node . run and not node . start when using mon because it will go into a restart loop if you don't.

$ mon -d "node . run" -p ircanywhere.pid -l logs/mon.log

If you're running in a production environment it would be better to run this behind a nginx proxy or similar. You can see install instructions at reverse proxies section in the documentation.

Connecting a client

IRCAnywhere has an built-in IRC server that allows you to connect using a regular IRC client. To enable the irc server make sure your ircServer.enable configuration is set to true and ircServer.port is set appropriately in your config.json file.

To connect a client, use the email you used to register as your login name and set your password accordingly. If you have multiple networks, you need to inform which network you're connecting to in your login by appending your login email with a / and the network name. For example [email protected]/freenode.

Updating

If you cloned the development branch, you can update IRCAnywhere by running the following two commands:

$ git pull
$ ./install.sh

And then restart accordingly. Client side files may be cached, a browser hard reload ctrl+r will force a full reload or try clearing your browser's cache.

Issues

Any bugs (preferably) should be reported via the issues page on this repository. It would be ideal if a screenshot of the bug could be provided (if applicable) and any errors in the javascript console log.

Come talk to us on the #ircanywhere channel in freenode.

ircanywhere's People

Contributors

bd808 avatar chrismeyersfsu avatar cydrobolt avatar dgw avatar mabhub avatar matuck avatar readmecritic avatar rickihastings avatar rodms10 avatar shahyar avatar

Stargazers

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

Watchers

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

ircanywhere's Issues

Joining new channels needs a refresh

Joining a new channel needs a refresh for it to pop up in the sidebar.

The data seems to be coming through the websocket but isn't being inserted properly. It also caused a deselection of all tabs which breaks more stuff. No errors in the console appear

Optional inactivity timer

Have a lastSeen flag in the user record which will be record the last action that the user performed, it's currently changed on connect but maybe we should change it to on command aswell to get a true last action timestamp. Although if we do we shouldn't propagate changes to the client because it's not needed.

A config option to specify a timeout in hours. At every hour we can loop the users and disconnect any that are deemed inactive.

Option to limit maximum length of backlog

Similar to ZNC, I think IRCAnywhere should have an option to limit the max amount of logs it can store for each user, making it more like a controlled BNC instance.

I think that if this restriction was per network, it would be quite nice. Of course, since I mentioned that this would work well in a controlled instance, the networks you can connect to would most likely be locked down.

Just some ideas :)

Improve chat on mobile

Here are some of the issues I found while trying a chat window on iOS and FirefoxOS:

  • Can't touch scroll
  • Chat input box doesn't show
  • Page is cropped
  • No way to switch channels
  • No way to show user list

I started working on this and got the first 3 items working. For the last two I'm planning on adding an entry on the options dropdown to show them as overlay on mobile only. Feel free to assign the issue to me or suggest more mobile tasks.

Relation to Subway IRC

I just recently found IRCAnywhere – before that I dabbled with Subway, which is another node.js, open-source IRC app: https://github.com/thedjpetersen/subway – which seems a bit older and more popular on Github.

The goals as well as the current outcome seems very much aligned. How is the relation between the two projects? Do you know of each other, do you work together? Would be cool to have some collaboration going on since it’s soo similar.

cc @thedjpetersen @ericbarch @hermansc from Subway and @rickihastings from IRCAnywhere. Cheers! :)

Replace for-in loops

Remove all usages of for-in loops and either replace them with lodash loops or normal loops because for-in loops prevent V8 from optimizing the function that it runs in, something to do with dynamic typing.

Be ideal if they can be replaced with lodash each loops as standard across the entire backend, so there isn't a mixture of different programming styles. Or maybe even array.forEach() however that won't work on objects.

Login form on try.ircanywhere.com fails

Registration appears to work (without email verification required), but login can fail and the browser hangs and does nothing . This seems to occur on different operating systems and browsers, often after a password reset.

Browser Console error:

Transitioned into 'login' dependency.min.js:6
event.returnValue is deprecated. Please use the standard event.preventDefault() instead.

throw er; // Unhandled stream error in pipe.

I setup everything like in the description and when I finally want to start ircanywhere i get the following Error:

xxxx@xxxxx:/home/xxxx/ircanywhere# node ircanywhere -c config.json

   _______  ________                    __
   /  _/ _ / ___/ _ | ___  __ ___    __/ /  ___ _______
  _/ // , _/ /__/ __ |/ _ / // / |/|/ / _ / -_) __/ -_)
 /___/_/|_|___/_/ |_/_//_/_, /|__,__/_//_/__/_/  __/
                      /___/

      Version: 0.1.2  (c) 2013 ircanywhere.com

18 Sep 14:01:03 - [notice] attempting to fork and start irc-factory with forever

stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: ENOENT, open 'logs/factory.forever.log'

Fix reset link + form bug

The link sent out in an email is invalid.

Also can't be visited because it forwards to login, need to press back to get to the page.

Improve document caching

At the moment all the documents from the oplog are cached so we can get the full document when it is deleted. See https://github.com/ircanywhere/ircanywhere/blob/development/server/app.js#L108-L115

This either needs to be removed or altered to store only specific collections because I think this is the reason the memory usage is quite large on the production server. Basically when there is xx,xxx items, there is going to be an object with xx,xxx items in it, which is NOT good at all.

Also these lines

delete Clients[id.toString()];
and
application.ee.on(['tabs', 'delete'], function(doc, id) {
need changed.

Registration/login not working

It seems to be an issue where the api doesn't want to respond to any calls from the front end. Looking in my chrome dev tools, the 2 calls are justsitting at pending for ages
screenshot from 2014-04-10 20 33 30

Eventually, the calls do fail:

Transitioned into 'signup' dependency.js:15460
POST http://130.159.141.115:3000/api/register net::ERR_EMPTY_RESPONSE dependency.js:8706
send dependency.js:8706
kb.extend.ajax dependency.js:8136
kb.(anonymous function) dependency.js:8282
App.SignupController.Ember.ObjectController.extend.actions.signupSubmit ircanywhere.js:2659
Ember.ActionHandler.Ember.Mixin.create.send dependency.js:30062
(anonymous function) dependency.js:48592
d.run dependency.js:17948
Ember.run dependency.js:18354
i.registeredActions.(anonymous function).handler dependency.js:48590
(anonymous function) dependency.js:33604
Ember.handleErrors dependency.js:13083
(anonymous function) dependency.js:33596
kb.event.dispatch dependency.js:5095
r.handle dependency.js:4766

and

Transitioned into 'login' dependency.js:15460
POST http://130.159.141.115:3000/api/login net::ERR_EMPTY_RESPONSE dependency.js:8706
send dependency.js:8706
kb.extend.ajax dependency.js:8136
kb.(anonymous function) dependency.js:8282
App.LoginController.Ember.ObjectController.extend.actions.loginSubmit ircanywhere.js:1973
Ember.ActionHandler.Ember.Mixin.create.send dependency.js:30062
(anonymous function) dependency.js:48592
d.run dependency.js:17948
Ember.run dependency.js:18354
i.registeredActions.(anonymous function).handler dependency.js:48590
(anonymous function) dependency.js:33604
Ember.handleErrors dependency.js:13083
(anonymous function) dependency.js:33596
kb.event.dispatch dependency.js:5095
r.handle

Tab Completion

Should be a pretty straight forward implementation.

This can be added before 0.2-beta

Add new network popup loses focus

Clicking on "Add a new network" brings up a popup for the network information. Clicking in the hostname box shows the cursor in the text field, but then typing anything shifts focus to the regular chat area and puts the typed characters there. The Port and SSL checkboxes are checkable, but the same thing happens in any other text field of the popup. Cicking the "Add Network" button in the popup makes the message "The fields, server, nick and name are all required" appear. Clicking outside of the popup makes it go away as expected. This was duplicated in IE, Chrome (both Linux and Windows), and Firefox (Windows).

On a side note, I suggest a comma in that message be moved to read "The fields server, nick, and name are all required"

Loading more backlog

As of at the moment there is no way to load more backlog, a new connection to the websocket will fetch the latest 50 items (maybe up this to 100?). If you keep the webpage open for a while and there is a substantial amount of messages they will stay in the window and eventually swapping between tabs will cause a lot of message rendering and will get slower. I need to implement the following changes;

  • Add a limit on the number of messages being rendered regardless of how many we have
  • Add a button at the top of the message view which lets us load more messages. If there are more messages still in the backlog we can just raise the limit. If not we can request some more from the server using a $lt query.
  • Implement some offset calculations, for example if there are 25 messages in the backlog already and we request more, we should request 25 below the highest msg _id, and in the promise up the limit so we show all 50 at once. I don't think this is even needed anymore.
  • Maybe look into popping items off the top of the DOM, or keeping a hard limit when new messages are entered via an event instead of a backlog load.
  • We can also look into removing items from our local cache to prevent massive buildups and memory overusage.

It's probably best to start these once the event emitter has been properly defined as it will require it's use, and will be a better usecase than the current methods for detecting new messages.

Running in a subdirectory

It is currently not possible to run IRCAnywhere in a subdirectory of a domain, e.g. example.com/irc. This is a problem when one doesn't have access to the configuration of subdomains (which excludes irc.example.com) and the firewall (which excludes example.com:8080).

Changing the url parameter in config.json seems to have no effect.
I'm assuming absolute urls are used throughout the code? (e.g. in client/templates/html/index.html)

Duplicated IRC network tab

I have two tabs "Blitzed" and "blitzed" for the same network (one lowercase, one uppercase). The second one appeared when killing and restarting mongod and ircanywhere.

Remove fibrous dependency

This is gonna be a large ish task and will probably require a little re architecture of some of the functions, but it's absolutely needed.

It's causing a lot of problems in production and hanging randomly.

Redesign the websocket RPC protocol

At the moment we use insert, update and remove and all the propagation is handled in one method.

We can split this out and define a proper RPC which is geared towards individual commands and not table updates because it could leave potential security holes and is just generally bad design for a protocol.

This will include the re architecture of the sockets.js file and merging it into a new file called rpc.js which will abstract more things over to the WebSocket object and handle just the RPC communication.

I'm interested in abstracting out the code handling event pushes over to the EventManager so we can eventually support multiple database backends for logs. For instance highly tailored database systems designed for this - Cassandra etc. (this is a maybe and could probably go in it's own issue for discussion post 0.2-final).

Task list to come.

  • Create the new RPC Manager as a Singleton
  • Implement the code for handling connects & instantiating a WebSocket object
  • Change the observe emitter from ['', ''] to handle changes individually and send out unique commands instead of generic 'update' and 'insert' commands.
  • Alter client side lib/sockets.js to handle the new RPC
  • Change client side update/insert code to use custom RPC commands
  • Change handle inserts and updates in backend to parse individual RPC commands.

Redesign selected tab handler

Currently selected tabs are handled via a selected boolean value in the tab record. When a new tab is selected the client record is updated automatically to change the selection and then a change is propagated down to the back end which deselects all tabs and selects the new one so the currently selected tab is saved when someone revisits. Because of this it is possible some race conditions can create scenarios where two or no tabs are selected at the same time and this causes for some nasty front end bugs.

The new method should store a selected tab ID in the user record, and determine whether the tab is selected from the current ID. Any tab selections should locally update the ID then propagate it down to the back end for saving.

  • Strip selected boolean from tab objects
  • Alter front end code to determine selected boolean from a condition comparing selected tab ID with tab ID
  • On tab change update selected tab ID and issue update on user record instead of tabs record
  • Add an allow rule for the user record on the back end

Localhost Problems

I have successfully deployed ircanywhere on a remote ubuntu 13.04 server. However, if I don't set the hosts file on my computer to resolve localhost to the ircanywhere server IP, then the ircanywhere will keep refreshing for forever.

I do note the file /static/js/deps/socket.io.js has a "localhost" in it, I promptly change it into the server IP/hostname but it won't work. What seem to be the issue here?

less distracting unread non-personal messages

Currently there is a counter displayed next to each channel listing the unread messages. This lists all messages, including those which are not directed at you.

This is really distracting, and unnecessary. What would be better is to only bold the channel name for new general messages, and show the counter only for messages directed at you.

Sidebar not scrollable

If you have many channels in the sidebar, the bottom ones don’t show. If you try to scroll the sidebar, the whole page scrolls, which results in stuff not looking good. ;)

Create a failover for new accounts being added

Currently in NetworkManager.addNetwork we attempt to add a network, if this ever fails for whatever reason (the reason in mind is an index related problem in mongodb which was causing the errors on the live server) we lose the network and can't re-create it when we've recovered from the errors.

This means I had to temporarily scrap accounts after I had fixed the errors because the new network is created when a user is created, if it fails we can possibly try it again on login, or add it to a queue to re-process.

Bug in npm start

Bug in npm start | Ubuntu 12.04 lts

bug

error mongodb

2014-03-12T01:32:25.901Z - error: MongoError: tailable cursor requested on non capped collection
at Object.toError (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/utils.js:110:11)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:685:54
at Cursor.close (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:959:5)
at commandHandler (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:685:21)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/db.js:1806:9
at Server.Base._callHandler (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/base.js:442:41)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/server.js:485:18
at MongoReply.parseBody (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
at null. (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/server.js:443:20)
at EventEmitter.emit (events.js:95:17)
2014-03-12T01:34:21.857Z - error: MongoError: tailable cursor requested on non capped collection
at Object.toError (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/utils.js:110:11)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:685:54
at Cursor.close (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:959:5)
at commandHandler (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/cursor.js:685:21)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/db.js:1806:9
at Server.Base._callHandler (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/base.js:442:41)
at /home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/server.js:485:18
at MongoReply.parseBody (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
at null. (/home/lhax/ircanywhere/node_modules/mongodb/lib/mongodb/connection/server.js:443:20)
at EventEmitter.emit (events.js:95:17)

Channels with ! bring unexpected behavior

Joining a channel like #!hi makes the client behave oddly.

At first, the channel window will be blank with no nicks in the list.
If a nick gets +o, it will show up in the list and the count will be 1.
If another client sends a message to the channel, a private message tab opens in IRCAnywhere from the sending client, but with no message. Typing in that tab sends a private message to the other client as expected.
If IRCAnywhere client sends a message to the channel, it goes through and it shows up in the channel tab.

There may be further, undiscovered oddities.

Sending message switches view to first channel in the list

When sending a message, sending works just fine. But it also switches the view to the first channel in the list.

I get these errors in the console:

Transitioned into 'network.tab'
in dependency.min.js:6

Recieved unknown RPC event:
error Object {command: "selectTab", error: "invalid document properties, see API docs"} in ircanywhere.js:700

Improve usability for newly registered users

A few things need done here as it's not too clear how to use the application when you create a new account;

  • Create a modal window which has the commands listed (and in future keyboard shortcuts?) openable via a link in the top corner
  • Automatically connect to closed networks on login (this applies for newly created networks)
  • If the number of networks is 0, then show a message telling users that they will need to create a network

Cannot call method 'toLowerCase' of null

2014-05-03T18:37:37.969Z - error: TypeError: Cannot call method 'toLowerCase' of null

I am getting this error when running ircanywhere on Debian Wheezy for a while. I cannot track why. Thanks for help!

Fix /cycle

Not working as expected, fix before 0.2-beta

Create an event emitter for IRC events

Could be a good idea to start work on the global event emitter here. Basically what I have in mind is monitor incoming data set changes from the application controller which will have access to Ember.Socket. This means monitoring all of the possible data sets events, channelUsers, tabs etc and parsing the data into usable information, so an insert on events collection putting {type: 'privmsg', ...} will interpret what tab and network it is, emit an event for it, which controllers can subscribe to and use to display their information. It should be cleaner and more efficient than the messy loops that are happening now.

I'm splitting this up into multiple tasks.

  • Create an event emitter object which maps events to controller functions
  • Determine what to do with incoming items based on what they are, so in socket.store('events') we can pass that into the emitter object and determine what event to emit
  • Replace code in SidebarController to handle incoming events to increment/decrement the unread counter

This is mainly for plugins as the core application won't use much of it, we can't let our message controllers depend on it due to context swapping when the tab changes. Although the code for that could be improved at some point.

Safeguard against every IRC handled event

So for example, from the new tests in irc-factory which test for broken IRC messages, things can come through with undefined variables when a broken or malicious message is sent in. So on occasion things like nickname or channel can be undefined, we don't currently look for this and we just continue, we need to check if these variables exist to prevent crashes.

List/links/banlist commands

Need to implement these, currently all data sent over web sockets are instigated by database changes. Which means the web socket RPC needs to be able to manually transfer data over the pipe, without it going into the database.

  • IrcHandler needs to be able to handle each of the responses for these commands and pipe them through to the necessary frontend clients using the RPC
  • The client side lib/sockets.js object needs to be able to manually handle these commands. We can forward them onto the event emitter and controllers can handle incoming data manually.
  • The application controller will listen for new data on that line and pop a modal window up which boots its own controller which will handle the html creation
  • Look into some sort of fancy table sorting?

It's also worth looking into pagination on /list because native clients can support thousands of channels in lists, IRCCloud limits it which is almost useless on large networks, where as kiwiirc has pagination. Pagination would possibly require some refactoring in the irc-factory end, such as caching responses and maybe our own list() function with pagination parameters?

Plugin system

This issue will serve base for any discussions / commits / tasks regarding the plugin system which will be started in 0.2. I'm hoping to implement a very powerful plugin system so that almost all of the application can be customised and built on allowing people to turn the system into a basecamp replacement or similar. The main ideas / tasks I have for it are below;

  • Create a top level folder called modules. All server and client side modules will have a folder in here with the name of the module, inside that the client side and server side code will sit in their own folders client and server
  • Modify Gruntfile.js to compile all hbs, less and js files in modules/*/client last. That way the modules will be able to see everything in the application and not have to worry about inserting our own script tags.
  • The client side javascript files will be able to inject into existing controllers and views to alter the way existing things are handled (or possibly even overwrite?). Ember makes this really easy.
  • Ability to reopen the Application.Socket object and add our controllers to the array in there so we can bind onPrivmsg events and such into our plugins.
  • The server will have an ModuleManager object that looks in that folder and includes any files in modules/*/server. Which will work similar to the client in that we can hook onto events using the pre and post event hooks, so we can hook onto incoming connections and perform actions based on it, or block events from happening.

Admin panel (w registration restrictions)

Seeing as though this is an often requested feature. It'll be nice to restrict registration via access codes that "admins" can create.

It's likely it will require some sort of admin panel to do this - which will be a whole stack of work and will require a new interface at /admin or something similar. I'm not entirely sure how I'll do this architecturally. And it could even be worth being in a standalone application because if it sits in the main process it adds another point of failure and means there will be multiple admin panels when I eventually implement clustering, which isn't what we want.

Because mongodb is setup for oplog tailing, and we can configure the admin panel to connect to the irc-factory process, we can get realtime feedback and potentially implement some incredibly full featured admin panel with dashboards and metrics, which will be the long term goal here.

This issue will serve as a progress log for a basic admin shell. A lot of this code can be pulled straight from the ircanywhere codebase.

IRCAnywhere

  • Add config setting to restrict registrations via codes
  • Change register function to look for valid codes upon registration

IRCAnywhere Admin

  • New repository for admin panel
  • Basic express + mongodb setup to connect to the local and oplog databases
  • Config loader
  • Basic login for admins but restrict to certain users, probably via config settings
  • Basic settings page with the ability to toggle runtime config settings
  • Manage registration codes

identd not working

On Debian Wheezy the identd of users is set to the username of which ircanywhere is running at, not the prefix with some random numbers like described in the config.example.json.
Are there any other requirements, so that the ident is set correctly by ircanywhere?

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.