Giter Club home page Giter Club logo

mural-legacy's Introduction

Mural
=====

Thanks for grabbing Mural. This codebase is unstable and thoroughly work-in-progress at the moment, and your contributions are quite appreciated.

Getting Mural
-------------

You can grab Mural from https://github.com/jwodicka/Mural


Running Mural
-------------

Right now, the only way to run Mural is to build it yourself. Mural is developed using the Mono runtime - it may work in Visual Studio, but the developers aren't promising anything on that build path. If you're interested in letting us know how we're doing on that front, get in touch!

You will need:

*   A recent version of Mono as of July 2011.
    *TODO: What version are we actually dependent on?* 
*   A copy of the MonoDevelop IDE - version 2.6 required.

A Very Simple User Manual
-------------------------

When you start up Mural, it will listen for a telnet connection on port 8888.

If you connect to Mural, you can issue commands against that connection.
Right now, Mural understands the following commands when it is not acting as a proxy:

*   connect _account_ _character_@_service_ _password_

    Connects a session to a service (also called a "world" in parts of the codebase).

    _account_ must be an account known to the system.

    _password_ is the password for _account_ (Passwords are per-account, **not** per-character)

    _service_ is the name of a known service that Mural can connect to. Services must be
    known to Mural - to avoid having Mural act as an open proxy, Mural installations should
    only forward connections to servers and ports known to have MU*-style services running
    on them.

    _character_ is the name of a known character on _service_. This is **not** necessarily
    the name the remote service knows for the character; but is instead used to route
    connections internal to Mural. If a connection is established to a character and service
    which Mural is already connected to, the two connections will be merged, and a second
    connection to the service will not be established. This is how connection-proxying works.

*   quit

    Disconnects from Mural.




mural-legacy's People

Contributors

jwodicka avatar bishoprook avatar

Stargazers

 avatar Alec avatar  avatar  avatar

Watchers

 avatar

mural-legacy's Issues

Abstract CharacterOwnershipIndex into an interface

Character ownership should function independent of implementation.

CharacterOwnershipIndex should be refactored into an interface for objects that can provide ownership data, and an initial implementation that can read such data from a simple format - initially, SQLite.

Start using a logger throughout

Mural emits a lot of debug output to the console. This should be replaced with a sensible, configurable logging class - either something good that we can just pull in, or something simple we build ourselves.

Implement an admin console

An admin console is the first service that lives entirely within Mural.

Users with access to the admin console can:

  • shut down the Mural server politely
  • add / remove user accounts
  • add / remove characters and permission to them
  • add / remove remote services ("worlds")

Other features the console wants? Syntax thoughts on the console? This is the explicit administrative interface to the system, so anything we find ourselves wanting to do to a running Mural instance is fair game to go in here.

This also adds, implicitly, our first notion of a privileged admin user class: users who have access to a character on console are capable of using the console powers.

Use an Inversion of Control container to provide object dependencies

A number of the objects in the system currently construct other objects to help - particularly, connections construct parts of the message pipeline, and things that need data construct the relevant providers to go out and get it from the DB.

While much of the code is already abstracted into interfaces with concrete instances, and does a decent job with manual dependency injection, we need to improve the dependency injection, and wrap it all in an IoC container to give us a point from which to manage it.

I'm currently looking at Ninject - http://ninject.org/ - as a way of doing that, and some TODOs littering the code make reference to it - but if you have an argument for another IoC container, we can have that discussion.

Accept incoming SSLed telnet connections

Right now, we can connect to remote services that use telnet-over-SSL (FurryMuck has been our test case for this), but it's not currently possible for an end-user to connect with an SSLed connection.

We need to enable SSL for incoming connections; telnet has no security against packet-sniffing, and it would be more appropriate to pass credentials in a secure fashion whenever possible.

BUG: Issue when connecting an SSLSession to a non-SSL endpoint

I accidentally connected an SSLSession to the non-SSLed version of the remote, and discovered that the system ends up in a badly inconsistent state. Didn't investigate much, but it's clearly a problem.

  • Investigate what actually happens to the message chain when SSL auth fails (e.g., because the other end doesn't support it)
  • Propose a sane alternative. (This will almost certainly be some class of failure.)

Unacceptable results are:

  • Remain connected to a session that's not actually going anywhere and also isn't parsing.
  • Anything that brings down Mural.

Ideally, we want to give a hint to the user (and the admins, via the log) of what happened here. This might happen because of a remote-side failure, but it it's recurrent for a given server, it's likely that whatever is on the other end just isn't talking SSL.

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.