RemoteAdmin:RemoteAdmin Examples

From OpenSimulator

Jump to: navigation, search

Below are a view Examples on how to send commands from a remote enviroment.

Contents

C# .NET

Example 1 - "admin_create_user"

This example needs the Nwc.XmlRpc library, located in your OpenSimulator bin folder.









public void CreateUser(Uri url, string adminPassword, string firstName, string lastName, string password, string email, int regionX, int regionY)
{
 var address = Dns.GetHostEntry(url.DnsSafeHost).AddressList[0];
 var ht = new Hashtable();
 ht["password"] = adminPassword;
 ht["user_firstname"] = firstName;
 ht["user_lastname"] = lastName;
 ht["user_password"] = password;
 ht["user_email"] = email;
 ht["start_region_x"] = regionX;
 ht["start_region_y"] = regionY;
 var parameters = new List<Hashtable> { ht };
 var rpc = new XmlRpcRequest("admin_create_user", parameters);
 rpc.Invoke(url.ToString());
}
 
[Test]
public void NativeUserRegistrationTest()
{
 CreateUser(new Uri("http://yourgrid.com:9000/"), "secret", "Test2", "user2", "apassword", "email@address.com", 0, 0);
}

Example 2 - "admin_create_user"

//Author Ottalese complements of yoursimspot.com 
//This example needs the CookComputing.XmlRpc library, this can be downloaded from http://www.xml-rpc.net/. 
//Recently updated code I originally posted, this can be secured using SSL. 
 
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CookComputing.XmlRpc;
 
[XmlRpcUrl("http://ServerIpAddress:9000/")]
 public interface RemoteOpensim&nbsp;: IXmlRpcProxy
 {
 //Create new user
 [XmlRpcMethod("admin_create_user")]
 XmlRpcStruct admin_create_user(XmlRpcStruct Parameters);
 }
 
 public partial class _Default&nbsp;: System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {
 }
 protected void SubmitButton_Click(object sender, EventArgs e)
 {
 XmlRpcStruct NewUser = new XmlRpcStruct(); //Will contain return results.
 XmlRpcStruct Parameters = new XmlRpcStruct();//Parameters passed.
 try
 {
 RemoteOpensim Admin = XmlRpcProxyGen.Create&lt;RemoteOpensim&gt;();
 
 Parameters.Add("password", "RemotePassword"); //Password you set in the .ini file for the RemoteAdmin
 Parameters.Add("user_firstname", SomeStringWithFirstName);
 Parameters.Add("user_lastname", SomeStringWithLastName);
 Parameters.Add("user_password", SomePassword);
 Parameters.Add("start_region_x", 0);
 Parameters.Add("start_region_y", 0);
 NewUser = Admin.admin_create_user(Parameters); 
 
 foreach (DictionaryEntry ReturnResults in NewUser)
 {
 Response.Write(ReturnResults.Key.ToString() + "&nbsp;: " + d.Value.ToString());//Returns if the user was added or not
 }
 }
 catch (Exception ex)
 {
 Response.Write(ex.Message); 
 }
 }
}

Python

Example 1 - admin_broadcast

# Author : DrScofield 
# Source : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/
# License : BSD License
 
#!/usr/bin/python 
import xmlrpclib 
 
# XML-RPC URL (http_listener_port) 
simulatorUrl = "http://127.0.0.1:9000"
 
# instantiate server object 
simulator = xmlrpclib.Server(simulatorUrl) 
 
# invoke admin_alert: requires password and message 
simulator.admin_broadcast({'password': 'secret', 'message': 'the answer is 42'})

Python 3.6 Example - admin_create_user

#!/usr/bin/python3
# OpenSim Remoteadmin createuser
# Python 3.6 - 2018 by Manfred Aabye Version  0.5.29
 
# import library
from appJar import gui
import xmlrpc.client
import configparser
from tkinter import *
import tkinter as tk
import sys
import os
import gettext
gettext.bindtextdomain('OpenSimRemote', '/language')
gettext.textdomain('OpenSimRemote')
_ = gettext.gettext
# gettext einfügen funktioniert so:
# print(_('This is a translatable string.'))
 
# -----------------------------   createuser   ---------------------------------------------
def createuser():
 
	# Button Auswertung
	def createuserbutton(button):
		if button == "Ende":
			app.stop()
			return
		if button == "Hilfe":
			app.infoBox("Hilfe", "Bitte Ihre Server Daten in die OpenSimAdmin.ini eintragen.")
			return
		if button == "Senden":
			config = configparser.ConfigParser()
			config.sections()
			config.read('OpenSimAdmin.ini')
			SimulatorAdress = config['DEFAULT']['SimulatorAdress']
			ConsoleUser = config['DEFAULT']['ConsoleUser']
			ConsolePass = config['DEFAULT']['ConsolePass']
			user_firstname = app.getEntry('user_firstname')
			user_lastname = app.getEntry('user_lastname')
			user_password = app.getEntry('user_password')
			start_region_x = app.getEntry('start_region_x')
			start_region_y = app.getEntry('start_region_y')
			user_email = app.getEntry('user_email')
			Simulator = xmlrpc.client.Server(SimulatorAdress)
			Simulator.admin_create_user({'password': ConsolePass, 'user_firstname': user_firstname, 'user_lastname': user_lastname, 'user_password': user_password, 'start_region_x': start_region_x, 'start_region_y': start_region_y, 'user_email': user_email})
			return
 
 
	# Erstelle GUI Variablen Aufruf mit app
	app = gui("create user", "355x260") # Fenster erstellen mit Namen und Groesse
	app.setFont(12) # Textgroesse
	app.startLabelFrame("create user")
 
	# Nachrichten Text Abfragen
	app.addLabelEntry("user_firstname")
	app.addLabelEntry("user_lastname")
	app.addLabelSecretEntry("user_password")
	app.addLabelEntry("start_region_x")
	app.addLabelEntry("start_region_y")
	app.addLabelEntry("user_email")
 
	# Buttons ruft die Function createuserbutton auf
	app.addButtons(["Senden", "Hilfe", "Ende"], createuserbutton)
	app.stopLabelFrame()
	# start GUI
	app.go()
 
createuser()

Create file: OpenSimAdmin.ini

[DEFAULT]
SimulatorAdress = http://127.0.0.1:9000/
ConsoleUser = Test
ConsolePass = secret

XML-RPC string

Example 1 - "create user"

(used with first C#.NET method above)


POST admin_create_user HTTP/1.0
Host: http://10.0.0.12:16384/
Content-type: text/xml
Content-Length: 993

<?xml version="1.0"?>
<methodCall>
    <methodName>admin_create_user</methodName>
        <params>
            <param>
                <value>
                    <struct>
                        <member>
                            <name>password</name>
                            <value><string>password</string></value>
                        </member>
                        <member>
                            <name>user_firstname</name>
                            <value><string>male</string></value>
                        </member>
                        <member>
                            <name>user_lastname</name>
                            <value><string>9999</string></value>
                        </member>
                        <member>
                            <name>user_password</name>
                            <value><string>password</string></value>
                        </member>
                        <member>
                            <name>user_email</name>
                            <value><string>none@email.com</string></value>
                        </member>
                        <member>
                            <name>start_region_x</name>
                            <value><int>128</int></value>
                        </member>
                        <member>
                            <name>start_region_y</name>
                            <value><int>128</int></value>
                        </member>
                    </struct>
                </value>
            </param>
        </params>
    </methodCall>

RemoteAdmin executable for Windows

The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.

PHP

Example 1

This example needs the RemoteAdmin PHP Class file available here (Original) or here (Revisited).

<?php
 
// Author : Olish Newman
// Source : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass
// Licence : BSD License
 
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.
include('RemoteAdmin.php');
 
// Instantiate the class with parameters identical to the Python example above
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');
 
// Invoke admin_broadcast
$parameters = array('message' => 'the answer is 42');
$myRemoteAdmin->SendCommand('admin_broadcast', $parameters);
 
// Invoke admin_shutdown (example for use without parameters)
$myRemoteAdmin->SendCommand('admin_shutdown');
 
// Invoke admin_create_user (multiple parameters)
$parameters = array('user_firstname' => 'Ruth', 'user_lastname' => 'OpenSim', 'user_password' => 'MyPassword', 'start_region_x' => '1000', 'start_region_y' => '1000');
$myRemoteAdmin->SendCommand('admin_create_user', $parameters);
?>

Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string. The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.

Example 2

Another example in PHP5, using CURL.
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal
<?php
class RemotePC {
 
 function __construct() {
 $this->serveruri = "http://myhost";
 $this->serverport ="9000";
 $this->password ="foobar";
 }
 
 function call($command,$parameters) {
 $parameters['password'] = $this->password;
 $request = xmlrpc_encode_request($command, $parameters);
 $ch = curl_init();
 curl_setopt( $ch, CURLOPT_URL, $this->serveruri);
 curl_setopt( $ch, CURLOPT_PORT, $this->serverport]); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);
 curl_setopt ( $ch, CURLOPT_TIMEOUT, 5); 
 $result = curl_exec($ch);
 curl_close($ch); 
 return xmlrpc_decode($result);
 }
}
?>

Example 3

Another example provided by MarcelEdward (triplehx3) can be found here. (Tested with OpenSimulator v0.9.1.0 Dev).


Perl

Because the OpenSimulator internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the Perl example here.

Credits

Thanks to DrScofield for the Python Script Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/

Personal tools
General
About This Wiki