Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F883005
api.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
api.php
View Options
<?php
/*
* Zed
* (c) 2010, Dereckson, some rights reserved
* Released under BSD license
*
* API entry point
*
*/
//API Preferences
define
(
'URL'
,
'http://'
.
$_SERVER
[
'HTTP_HOST'
]
.
'/index.php'
);
//Pluton library
require_once
(
'includes/core.php'
);
require_once
(
'includes/config.php'
);
//API libs
require_once
(
'includes/api/api_helpers.php'
);
require_once
(
'includes/api/cerbere.php'
);
//Use our URL controller method if you want to mod_rewrite the API
$url
=
explode
(
'/'
,
substr
(
$_SERVER
[
'PATH_INFO'
],
1
));
switch
(
$module
=
$url
[
0
])
{
/* -------------------------------------------------------------
Site API
/time
/location
/perso (disabled)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
case
''
:
//Nothing to do
//TODO: offer documentation instead
die
();
case
'time'
:
//Hypership time
api_output
(
get_hypership_time
(),
"time"
);
break
;
case
'location'
:
//Checks creditentials
cerbere
();
//Gets location info
require_once
(
"includes/geo/location.php"
);
$location
=
new
GeoLocation
(
$url
[
1
],
$url
[
2
]);
api_output
(
$location
,
"location"
);
break
;
//case 'perso':
// //Checks creditentials
// cerbere();
// //Gets perso info
// require_once("includes/objects/perso.php");
// $perso = new Perso($url[1]);
// api_output($perso, "perso");
// break;
/* -------------------------------------------------------------
Ship API
/authenticate
/appauthenticate
/appauthenticated
/move
/land
/flyout
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
case
'ship'
:
//Ship API
//Gets ship from Ship API key (distinct of regular API keys)
require_once
(
'includes/objects/ship.php'
);
$ship
=
Ship
::
from_api_key
(
$_REQUEST
[
'key'
])
or
cerbere_die
(
"Invalid ship API key"
);
switch
(
$command
=
$url
[
1
])
{
case
''
:
//Nothing to do
//TODO: offer documentation instead
die
();
case
'authenticate'
:
//TODO: web authenticate
break
;
case
'appauthenticate'
:
//Allows desktop application to authenticate an user
$tmp_session_id
=
$url
[
2
]
or
cerbere_die
(
"/appauthenticate/ must be followed by any session identifier"
);
if
(
$_REQUEST
[
'name'
])
{
//Perso will be offered auth invite at next login.
//Handy for devices like PDA, where it's not easy to auth.
$perso
=
new
Perso
(
$_REQUEST
[
'name'
]);
if
(
$perso
->
lastError
)
{
cerbere_die
(
$perso
->
lastError
);
}
if
(!
$ship
->
is_perso_authenticated
(
$perso
->
id
))
{
$ship
->
request_perso_authenticate
(
$perso
->
id
);
}
$ship
->
request_perso_confirm_session
(
$tmp_session_id
,
$perso
->
id
);
}
else
{
//Delivers an URL. App have to redirects user to this URL
//launching a browser or printing the link.
$ship_code
=
$ship
->
get_code
();
registry_set
(
"api.ship.session.$ship_code.$tmp_session_id"
,
-
1
);
$url
=
get_server_url
()
.
get_url
()
.
"?action=api.ship.appauthenticate&session_id="
.
$tmp_session_id
;
api_output
(
$url
,
"URL"
);
}
break
;
case
'appauthenticated'
:
//Checks the user authentication
$tmp_session_id
=
$url
[
2
]
or
cerbere_die
(
"/appauthenticated/ must be followed by any session identifier you used in /appauthenticate"
);
$perso_id
=
$ship
->
get_perso_from_session
(
$tmp_session_id
);
if
(!
$isPersoAuth
=
$ship
->
is_perso_authenticated
(
$perso_id
))
{
//Global auth not ok/revoked.
$auth
->
status
=
-
1
;
}
else
{
$perso
=
Perso
::
get
(
$perso_id
);
$auth
->
status
=
1
;
$auth
->
perso
->
id
=
$perso
->
id
;
$auth
->
perso
->
nickname
=
$perso
->
nickname
;
$auth
->
perso
->
name
=
$perso
->
name
;
//$auth->perso->location = $perso->location;
//Is the perso on board? Yes if its global location is S...
$auth
->
perso
->
onBoard
=
(
$perso
->
location_global
[
0
]
==
'S'
&&
substr
(
$perso
->
location_global
,
1
,
5
)
==
$ship
->
id
);
if
(
$auth
->
perso
->
onBoard
)
{
//If so, give local location
$auth
->
perso
->
location_local
=
$perso
->
location_local
;
}
}
api_output
(
$auth
,
"auth"
);
break
;
case
'move'
:
//Moves the ship to a new location, given absolute coordinates
//TODO: handle relative moves
if
(
count
(
$url
)
<
2
)
cerbere_die
(
"/move/ must be followed by a location expression"
);
//Gets location class
//It's allow: (1) to normalize locations between formats
// (2) to ensure the syntax
//==> if the ship want to communicate free forms coordinates, must be added on GeoLocation a free format
try
{
$location
=
new
GeoLocation
(
$url
[
2
]);
}
catch
(
Exception
$ex
)
{
$reply
->
success
=
0
;
$reply
->
error
=
$ex
->
getMessage
();
api_output
(
$reply
,
"move"
);
break
;
}
$ship
->
location_global
=
$location
->
global
;
$ship
->
save_to_database
();
$reply
->
success
=
1
;
$reply
->
location
=
$ship
->
location
;
api_output
(
$reply
,
"move"
);
break
;
case
'land'
:
case
'flyin'
:
//Flies in
try
{
$location
=
new
GeoLocation
(
$location
);
}
catch
(
Exception
$ex
)
{
$reply
->
success
=
0
;
$reply
->
error
=
$ex
->
getMessage
();
api_output
(
$reply
,
"land"
);
break
;
}
break
;
case
'flyout'
:
//Flies out
break
;
}
break
;
/* -------------------------------------------------------------
Application API
/checkuserkey
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
case
'app'
:
//Application API
require_once
(
"includes/objects/application.php"
);
$app
=
Application
::
from_api_key
(
$_REQUEST
[
'key'
])
or
cerbere_die
(
"Invalid application API key"
);
switch
(
$command
=
$url
[
1
])
{
case
''
:
//Nothing to do
//TODO: offer documentation instead
die
();
case
'checkuserkey'
:
if
(
count
(
$url
)
<
2
)
cerbere_die
(
"/checkuserkey/ must be followed by an user key"
);
$reply
=
(
boolean
)
$app
->
get_perso_id
(
$url
[
2
]);
api_output
(
$reply
,
"check"
);
break
;
}
break
;
default
:
echo
"Unknown module:"
;
dprint_r
(
$url
);
break
;
}
?>
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Thu, Apr 3, 16:06 (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
21608
Default Alt Text
api.php (7 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment