109 lines
No EOL
8.5 KiB
HTML
109 lines
No EOL
8.5 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<title>CLiki: Saluto</title>
|
|
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
|
|
href="https://www.cliki.net/site/feed/article.atom?title=Saluto">
|
|
<link rel="stylesheet" href="static/css/style.css">
|
|
<link rel="stylesheet" href="static/css/colorize.css">
|
|
</head>
|
|
|
|
<body>
|
|
<span class="hidden">CLiki - Saluto</span>
|
|
<div id="content"><div id="content-area"><div id="article-title">Saluto</div><div id="article">Saluto is a submodule for <a href="http://cliki.net/RESTAS">RESTAS</a> web-framework, which allow web-site users to be authorized with OAuth 2.0 protocol.<p>Source code: <a href="https://github.com/dmitrys99/saluto">https://github.com/dmitrys99/saluto</a><p>Currently implemented OAuth 2.0 providers:<p><ul>
|
|
<li>Facebook
|
|
</li>
|
|
<li>VK.com
|
|
</li>
|
|
<li>OK.ru
|
|
</li>
|
|
<li>Github.com
|
|
</li>
|
|
<li>Google.com
|
|
</li>
|
|
<li>Mail.ru
|
|
</li>
|
|
</ul><p>Example usage:<p><div class="code"><span class="nonparen">
|
|
<span class="paren1">(<span class="nonparen"><i><span class="symbol">defun</span></i> do-init-site <span class="paren2">(<span class="nonparen"></span>)</span>
|
|
<span class="paren2">(<span class="nonparen">init-cache</span>)</span>
|
|
<span class="paren2">(<span class="nonparen">init-db</span>)</span>
|
|
|
|
<span class="paren2">(<span class="nonparen">restas:mount-module saluto <span class="paren3">(<span class="nonparen"><span class="keyword">#:saluto</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="keyword">:url</span> <span class="string">"auth/"</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="keyword">:inherit-parent-context</span> t</span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="special">saluto:*providers*</span> <span class="paren4">(<span class="nonparen">list
|
|
<span class="paren5">(<span class="nonparen">make-instance 'saluto:oauth2-facebook.com
|
|
<span class="keyword">:name</span> <span class="string">"facebook.com"</span>
|
|
<span class="keyword">:app-id</span> <span class="string">"<app-id>"</span>
|
|
<span class="keyword">:app-private-key</span> <span class="string">"<app-key>"</span></span>)</span>
|
|
<span class="paren5">(<span class="nonparen">make-instance 'saluto:oauth2-vk.com
|
|
<span class="keyword">:name</span> <span class="string">"vk.com"</span>
|
|
<span class="keyword">:app-id</span> <span class="string">"<app-id>"</span>
|
|
<span class="keyword">:app-private-key</span> <span class="string">"<app-key>"</span></span>)</span>
|
|
<span class="paren5">(<span class="nonparen">make-instance 'saluto:oauth2-ok.ru
|
|
<span class="keyword">:name</span> <span class="string">"odnoklassniki.ru"</span>
|
|
<span class="keyword">:app-id</span> <span class="string">"<app-id>"</span>
|
|
<span class="keyword">:app-public-key</span> <span class="string">"<app-key>"</span>
|
|
<span class="keyword">:app-private-key</span> <span class="string">"<app-private>"</span></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="special">saluto:*store-userinfo-fun*</span>
|
|
<span class="paren4">(<span class="nonparen"><i><span class="symbol">lambda</span></i> <span class="paren5">(<span class="nonparen">info</span>)</span>
|
|
<span class="paren5">(<span class="nonparen">when info
|
|
<span class="comment">;; Process user info, returned by OAuth provider, like this:
|
|
</span> <span class="comment">;; (maybe-save-user info :cache-user t :session (session-identifier))
|
|
</span> <span class="comment">;;
|
|
</span> <span class="comment">;; Structure of user info:
|
|
</span> <span class="comment">;; '(:first-name <first name>
|
|
</span> <span class="comment">;; :last-name <last-name>
|
|
</span> <span class="comment">;; :email <email>
|
|
</span> <span class="comment">;; :uid <user id at provider level>
|
|
</span> <span class="comment">;; :avatar <user avatar URI>
|
|
</span> <span class="comment">;; :provider <provider name>)
|
|
</span> </span>)</span></span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="special">saluto:*logged-in-p-fun*</span>
|
|
<span class="comment">;; function, called to check if user logged or not
|
|
</span> <span class="paren4">(<span class="nonparen"><i><span class="symbol">lambda</span></i> <span class="paren5">(<span class="nonparen"></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="special">saluto:*logout-fun*</span>
|
|
<span class="comment">;; function, called on logout
|
|
</span> <span class="paren4">(<span class="nonparen"><i><span class="symbol">lambda</span></i> <span class="paren5">(<span class="nonparen">session</span>)</span>
|
|
<span class="comment">;;
|
|
</span> <span class="comment">;; (delete-userauth-from-cache session)
|
|
</span> </span>)</span></span>)</span></span>)</span></span>)</span>
|
|
</span></div><p>To start login process point user to URI /auth/goto/provider, ex.: http://localhost:8080/auth/goto/vk.com/<p>Topics: <a href="networking.html" class="category">networking</a> <a href="web API.html" class="category">web API</a></div></div>
|
|
<div id="footer" class="buttonbar"><ul><li><a href="Saluto.html">Current version</a></li>
|
|
<li><a href="https://www.cliki.net/site/history?article=Saluto">History</a></li>
|
|
<li><a href="https://www.cliki.net/site/backlinks?article=Saluto">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=Saluto&from-revision=3610007554">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
|
|
</div>
|
|
<div id="header-buttons" class="buttonbar">
|
|
<ul>
|
|
<li><a href="https://www.cliki.net/">Home</a></li>
|
|
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
|
|
<li><a href="CLiki.html">About</a></li>
|
|
<li><a href="Text Formatting.html">Text Formatting</a></li>
|
|
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
|
|
</ul>
|
|
<div id="search">
|
|
<form action="https://www.cliki.net/site/search">
|
|
<label for="search_query" class="hidden">Search CLiki</label>
|
|
<input type="text" name="query" id="search_query" value="" />
|
|
<input type="submit" value="search" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div id="pageheader">
|
|
<div id="header">
|
|
<span id="logo">CLiki</span>
|
|
<span id="slogan">the common lisp wiki</span>
|
|
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
|
|
<label for="login_name" class="hidden">Account name</label>
|
|
<input type="text" name="name" id="login_name" class="login_input" />
|
|
<label for= "login_password" class="hidden">Password</label>
|
|
<input type="password" name="password" id="login_password" class="login_input" />
|
|
<input type="submit" name="login" value="login" id="login_submit" /><br />
|
|
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
|
|
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body></html> |