Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/%
!info
|Name|ToggleLeftSidebar|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
!show
<<tiddler {{
 var co=config.options;
 if (co.chkShowLeftSidebar===undefined) co.chkShowLeftSidebar=true;
 var mm=document.getElementById('mainMenu');
 var da=document.getElementById('displayArea');
 if (mm) {
 mm.style.display=co.chkShowLeftSidebar?'block':'none';
 da.style.marginLeft=co.chkShowLeftSidebar?'':'1em';
 }
'';}}>><html><nowiki><a href='javascript:;' title="$2"
onmouseover="
 this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
 +encodeURIComponent(encodeURIComponent(this.onclick))
 +')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
 var co=config.options;
 var opt='chkShowLeftSidebar';
 var show=co[opt]=!co[opt];
 var mm=document.getElementById('mainMenu');
 var da=document.getElementById('displayArea');
 if (mm) {
 mm.style.display=show?'block':'none';
 da.style.marginLeft=show?'':'1em';
 }
 saveOptionCookie(opt);
 var labelShow=co.txtToggleLeftSideBarLabelShow||'&#x25BA;';
 var labelHide=co.txtToggleLeftSideBarLabelHide||'&#x25C4;';
 if (this.innerHTML==labelShow||this.innerHTML==labelHide) 
 this.innerHTML=show?labelHide:labelShow;
 this.title=(show?'hide':'show')+' left sidebar';
 var sm=document.getElementById('storyMenu');
 if (sm) config.refreshers.content(sm);
 return false;
">$1</a></html>
!end
%/<<tiddler {{
 var src='.ToggleLeftSidebar';
 src+(tiddler&&tiddler.title==src?'##info':'##show');
}} with: {{
 var co=config.options;
 var labelShow=co.txtToggleLeftSideBarLabelShow||'&#x25C1;&#x25C4;'; 
 var labelHide=co.txtToggleLeftSideBarLabelHide||'&#x25C1;&#x25C4;';
 '$1'!='$'+'1'?'$1':(co.chkShowLeftSidebar?labelHide:labelShow);
}} {{
 var tip=(config.options.chkShowLeftSidebar?'hide':'show')+' left sidebar';
 '$2'!='$'+'2'?'$2':tip;
}}>>
/%
!info
|Name|ToggleRightSidebar|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
!end
!show
<<tiddler {{
	var co=config.options;
	if (co.chkShowRightSidebar===undefined) co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=co.chkShowRightSidebar?'block':'none';
		da.style.marginRight=co.chkShowRightSidebar?'':'1em';
	}
'';}}>><html><nowiki><a href='javascript:;' title="$2"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	var co=config.options;
	var opt='chkShowRightSidebar';
	var show=co[opt]=!co[opt];
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=show?'block':'none';
		da.style.marginRight=show?'':'1em';
	}
	saveOptionCookie(opt);
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (this.innerHTML==labelShow||this.innerHTML==labelHide) 
		this.innerHTML=show?labelHide:labelShow;
	this.title=(show?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu');
	if (sm) config.refreshers.content(sm);
	return false;
">$1</a></html>
!end
%/<<tiddler {{
	var src='.ToggleRightSidebar';
	src+(tiddler&&tiddler.title==src?'##info':'##show');
}} with: {{
	var co=config.options;
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25BA;&#x25B7;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;&#x25B7;';
	'$1'!='$'+'1'?'$1':(co.chkShowRightSidebar?labelHide:labelShow);
}} {{
	var tip=(config.options.chkShowRightSidebar?'hide':'show')+' right sidebar';
	'$2'!='$'+'2'?'$2':tip;
}}>>
<<tabs Actu "Mars 2018" "Mars 2018" "Actualités Mars 2018" "2018" "2018" "Actualités 2018" >>
!Réactivation du serveur Web du chapitre français de la [[Cloud Security Alliance]]

[>img(200px,auto)[i/cloud-security-alliance.png]]Après plusieurs mois d'arrêt, le serveur Web du [[Chapitre français|CSA-FR]] de la [[Cloud Security Alliance]] sera remis en ligne pour le 1^^er^^ mars 2018.

Les nuages se lèvent, les travaux sont terminés, le site va de nouveau être visible !

Le lien à ajouter à vos favoris : http://www.cloudsecurityalliance.fr
!Prochaines conférences téléphoniques des groupes de travail en mars 2018
* "//''Top Threats'' Working Group//" : 27.03.2018, 19h00
* "//Blockchain/Distributed Ledger Working Group//" : 28.03.2018, 19h00
* "//''Cloud Controls Matrix'' Working Group//" : 29.03.2018, 19h00
* "//Software Defined Perimeter Working Group//" : 30.03.2018, 19h00

!Conférences au [[Forum Securité@Cloud|http://www.cloudcomputing-world.com/security]] le jeudi 22 mars 2018
[>img(300px,auto)[i/ForumSecuriteCloud-2018.png]]
La [[Cloud Security Alliance]] fera la présentation d'introduction le jeudi 22 mars 2018 à 14h15 et participera à une table ronde à 15h15 lors de la conférence [[Forum Securité@Cloud|http://www.cloudcomputing-world.com/security]] à Paris, Porte de Versailles.

* Forum Sécurité@Cloud : http://www.cloudcomputing-world.com/security
** Flux Twitter : https://twitter.com/forumsecucloud
* ''F10 : Panorama des attaques dans le Cloud'' +++[»]
<<<
!F10 : Panorama des attaques dans le Cloud.
Y-a-t-il des rançongiciels dans le Cloud ? A quels types d'attaques devons-nous nous préparer ?
__Intervenant :__
* Olivier CALEFF - co-fondateur du Chapter français de la [[Cloud Security Alliance]]	
<<<
 
=== 
** Détails : http://www.cloudcomputing-world.com/conferences-et-ateliers/conferences#F10
** Inscription : http://www.cloudcomputing-world.com/visiter?interetConf=F10
* ''F12 : Comment réagir face à une attaque ?'' (Table ronde) +++[»]
<<<
!F12 : Comment réagir face à une attaque ?
Quelles mesures doit-on prendre avant et après une attaque ? Quels sont les organismes qui vont pouvoir vous aider ? Quelles conséquences vis-à-vis des clients et des fournisseurs ?
__Participants à la table ronde :__
* __Animateur :__ Olivier CALEFF -- co-fondateur du Chapter français de la [[Cloud Security Alliance]]
* Mahault BONNET-MADIN -- responsable partenariats au CSIRT-PJ
* Adrienne CHARMET -- chargée de mission, Cybermalveillance.gouv.fr
* Michel JUVIN -- expert en cybersécurité, CESIN
* Christophe MARAIS -- capitaine de police, chef adjoint du CSIRT-PJ
<<<
 
=== 
** Détails : http://www.cloudcomputing-world.com/conferences-et-ateliers/conferences#F12
** Inscription : http://www.cloudcomputing-world.com/visiter?interetConf=F12

!Partenariat avec le salon [[Cloud Computing World Expo|http://www.cloudcomputing-world.com/]] les 21 et 22 mars 2018 à Paris, Porte de Versailles
[>img(100px,auto)[i/CloudComputingWorld.jpg]]
La [[Cloud Security Alliance]] est partenaire de la [[Cloud Computing World Expo|http://www.cloudcomputing-world.com/]]

* Détails : http://www.cloudcomputing-world.com/
* Inscription : http://www.cloudcomputing-world.com/visiter
Bienvenue sur le nouveau site du [[Chapitre français|CSA-FR]] de la [[Cloud Security Alliance]] [>img(200px,auto)[i/cloud-security-alliance.png]]

Vous y trouverez :
* une [[présentation|Présentation du Chapitre Français de la Cloud Security Alliance]] succinte
* les dernières [[actualités|Actualités]]
* les dernières publications sur le [[blog|Blog]] de la [[Cloud Security Alliance]] (mise à jour le ''20 mai 2018'')
* les derniers [[documents|Documents]] publiés par la [[Cloud Security Alliance]]
* les [[groupes de travail|Groupes de travail]] de la [[Cloud Security Alliance]]
<<tabs Blog "Mai 2018" "Mai 2018" "Blog Mai 2018" "Avril 2018" "Avril 2018" "Blog Avril 2018" "Mars 2018" "Mars 2018" "Blog Mars 2018" "2018" "2018" "Blog 2018" "2017" "2017" "Blog 2017" >>
Aucun[[ |.]]article n'est repris sur ce site pour le moment.

Consultez directement le lien original : https://blog.cloudsecurityalliance.org/
!"//Saturday Security Spotlight: Malware, AWS, and US Defense//"
[>img[iCSA/Businessman-holding-a-newspaper-while-having-breakfast-in-hi.jpg]]Publié le 26 février 2018 -- Rédigé par Jacob Serpa, Product Marketing Manager, Bitglass

<<<
__''Plein feu dominical sur la sécurité : Malware, AWS, et le Ministère de la Défense américain''__
Voici les principaux articles sur la cybersécurité de ces dernières semaines:
* le logiciel malveillant AndroRAT espionne les utilisateurs Android
* les Smart TV facilement piratables
* l'outil BuckHacker trouve des données non sécurisées dans les //buckets// AWS
* la divulgation de données de Octoly expose les données personnelles de stars des médias sociaux
* Les pirates russes ciblent les sous-traitants du Ministère de la Défense américain.

__le logiciel malveillant AndroRAT espionne les utilisateurs Android__
Un nouveau type de logiciel malveillant ciblant les périphériques Android donne aux pirates informatiques un contrôle étendu sur les téléphones des utilisateurs. La menace permet aux malveillants d'utiliser les microphones des appareils (pour enregistrer de l'audio), les caméras (pour prendre des photos) et les fichiers (pour voler de l'information). Cela pose bien évidemment un grand problème de confidentialité pour tous les utilisateurs d'Android du monde.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/26/saturday-security-spotlight-malware-aws-us-defense/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Unmanaged Device Controls, External Sharing, and Other Real CASB Use Cases//"
[>img[iCSA/hands-coffee-smartphone-technology-300x200.jpg]]Publié le 23 février 2018 -- Rédigé par Salim Hafid, Responsable Marketing Produit, Bitglass

<<<
__''Contrôles de périphériques non gérés, partage externe et autres cas d'utilisation réels du CASB''__
Beaucoup de gens dans l'industrie de la sécurité ont entendu parler des CASB (//Cloud Access Security Brokers// ou courtiers en sécurité d'accès au nuage) comme étant les solutions de référence pour la protection des données et des menaces dans le Cloud. Mais où les CASB s'intègrent ils exactement ? Si vous possédez déjà un pare-feu NGFW (//Next Generation FireWall// : Pare-Feu de Nouvelle Génération) ou peut-être une solution de type passerelle Web sécurisée, pourquoi investir dans le déploiement d'un CASB?

Ci-dessous, nous vous présentons trois des cas d'utilisation les plus courants dans le monde réel pour un courtier en sécurité d'accès au Cloud.

__Partage externe__
La plupart des applications cloud ont une forme de contrôle de partage externe intégré. Peut-être un administrateur peut-il révoquer l'accès à certains documents, définir des permissions granulaires dans toute l'organisation ou bloquer le partage dans son ensemble.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/23/unmanaged-device-controls-external-sharing-real-casb-use-cases/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//A Home for CASB//"
[>img[iCSA/A-home-for-CASB-300x161.png]]Publié le 21 février 2018 -- Rédigé par Kyle Watson, Partner, Information Security, Cedrus

<<<
__''Un positionnement organisationnel pour les CASB''__

Au cours des 18 derniers mois, j'ai travaillé sur le CASB sous une forme ou une autre, y compris:
* des vidéos architecturales et techniques éducatives
* des demandes d'assistance pour une demande de proposition (RFP : //Request for Proposal//)
* des présentations avant-vente et des démos
* des maquettes et des Preuve des Concepts (PoC : //Proof Of Concept//)
* des mises en œuvre
* des opération de construction er des transitions

J'ai découvert des choses intéressantes en travaillant avec des fournisseurs, des clients et notre propre personnel technique de sécurité au sein de la société Cedrus. L'une d'entre elles concerne le modèle de propriété. Il n' y a pas de cartographie avec relations bi-directionnelles lorsque vous comparez les fonctionnalités de la solution CASB aux structures des organisations qui les déploient. Il semble qu'il y ait un manque de placement organisationnel, un foyer permanent lorsqu'il s'agit du CASB.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/21/a-home-for-casb/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Malware P.I. – Odds Are You’re Infected//"
[>img[iCSA/br-malware-pi-thumb-300x232.png]]Publié le 19 février 2018 -- Rédigé par Jacob Serpa, Responsable Marketing Produit, Bitglass

<<<
In Bitglass’ latest report, Malware P.I., the Next-Gen CASB company uncovered startling information about the rate of malware infection amongst organizations. Additionally, experiments with a new piece of zero-day malware yielded shocking results. Here is a glimpse at some of the outcomes.

Nearly half of organizations have malware in one of their cloud apps
While the cloud endows organizations with great flexibility, efficiency, and collaboration, cloud apps and personal devices accessing corporate data can inadvertantly house and spread malware. However, this does not mean that operating in the cloud is inherently more dangerous than the traditional way of doing things.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/19/malware-p-odds-youre-infected/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Agentless Mobile Security: No More Tradeoffs//"
[>img[iCSA/Triangle-300x173.png]]Publié le 15 février 2018 -- Rédigé par Kevin Lee, Systems QA Engineer, Bitglass

<<<
Have you ever seen a “Pick two out of three” diagram? They present three concepts and force individuals to select the one that they see as the least important. The tradeoffs between convenience, privacy, and security serve as a perfect example of a “Pick two” situation for many mobile security solutions. 

Industries have seen massive growth in the number of personal devices that touch sensitive information, resulting in a need to secure data as it is accessed by these endpoints. Various solutions have been adopted by many companies, but all tend to fall into the classic “Pick two” scenario. 
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/15/agentless-mobile-security-no-tradeoffs/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Saturday Security Spotlight: Military, Apps, and Threats//"
[>img[iCSA/Businessman-holding-a-newspaper-while-having-breakfast-in-hi.jpg]]Publié le 12 février 2018 -- Rédigé par Jacob Serpa, Responsable Marketing, Bitglass

<<<
Here are the top cybersecurity stories of recent weeks:
* Fitness app exposes military bases
* Soldiers’ names revealed by app
* Google Play filled with fake apps
* Medical devices easily hacked
* The internet of things creates risk for the enterprise

Fitness app exposes military bases
Strava, the creators of a fitness tracking app, released heatmaps of its users’ movements. Unfortunately, this revealed the inner workings of military bases abroad by highlighting the movements of soldiers who use said app within their bases. Naturally, making this information publicly available raises questions of privacy and national security.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/12/saturday-security-spotlight-military-apps-threats/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Why Next-Gen Firewalls Can’t Replace CASBs//"
[>img[iCSA/Server-hallway-in-the-sky-300x200.jpg]]Publié le 7 février 2018 -- Rédigé par Joe Green, Vice President,/WW Solutions Engineering, Bitglass

<<<
A security solution is only as good as the data it protects. Some solutions focus on data protection on the corporate network, others focus entirely on cloud data, and a select few enable security at access from any network.

Next-gen firewalls (NGFWs) are the traditional solution for many organizations looking to secure their corporate networks. They are effective at what they do, securing corporate network traffic by routing everything through on-premises appliances. As corporate data begins moving outside the corporate network, as it does with cloud and mobile, the NGFW can no longer provide protection.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/07/next-gen-firewalls-cant-replace-casbs/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//EMV Chip Cards Are Working – That’s Good and Bad//"
[>img[iCSA/emv-casb-300x134.jpg]]Publié le 2 février 2018 -- Rédigé par Rich Campagna, CEO, Bitglass

<<<
For many years, credit card companies and retailers ruled the news headlines as victims of breaches. Why? Hackers’ profit motives lead them to credit card numbers as the quickest path to monetization. Appropriate data in hand and a working counterfeit card could be cranked out in seconds and used to purchase a laptop or TV at the local Walmart -- easy to fence in the local black market.

Sick of being the target, the payment card industry got smart about fraud detection, created a set of regulatory compliance requirements (PCI-DSS) and perhaps even more importantly, rolled out EMV “chip-and-pin” technologies, which are meant to reduce counterfeit card fraud by presenting a unique cryptographic code for each transaction -- much more difficult to duplicate than the static information embedded in the magnetic stripe of older cards.
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/02/02/emv-chip-cards-working-thats-good-bad/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Are Traditional Security Tools Dead?//"
[>img(150px,auto)[iCSA/cloud_hard.png]]Publié le 26 avril 2018 -- Rédigé par Salim Hafid, Product Marketing Manager, Bitglass

<<<
__''Les outils de sécurité traditionnels ont-ils encore un avenir?''__
//Lors de l'évaluation des différentes options en matière de sécurité, les RSSI et les architectes sécurité recherchent toujours la solution qui minimisera les coûts et les frais d'administration et d'exploitation tout en maximisant la protection des données. Au plus haut niveau, les entreprises se sont appuyées sur les outils traditionnels comme moyen de protection des données à long terme, mais au fur et à mesure de l'adoption des applications Cloud, ces outils sont de plus en plus considérés comme inefficaces, incapables de répondre aux besoins d'une entreprise en perpétuelle évolution avec un parc  croissant d'applications Cloud et de terminaux non gérés capables d'accéder à ces applications.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/26/are-traditional-security-tools-dead/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
&rArr; Télécharger le rapport Bitglass sur https://pages.bitglass.com/CloudHard_LP.html

----
!"//CCSK vs CCSP: An Unbiased Comparison//"
[>img(150px,auto)[iCSA/CCSP-Triangle-1.png]]Publié le 24 avril 2018 -- Rédigé par Graham Thompson, CCSK, CCSP, CISSP, Authorized Trainer, Intrinsec Security

<<<
__''CCSK ou CCSP: une comparaison impartiale''__
//CCSK vs CCSP - On me pose souvent deux questions chaque fois que quelqu'un découvre que je suis instructeur pour les cours CCSK de la Cloud Security Alliance et ceux du CCSP de l'(ISC)^^2^^ :
# "Quelle est la différence entre les deux certifications ?"
# "L'examen CCSK est-il difficile ?" .... C'est très difficile, mais on en reparlera plus tard !
Dans cet article, je vais identifier les différences entre deux des certifications de sécurité dans le Cloud les plus respectées de l'industrie, à savoir le CCSK et le CCSP. Nous espérons qu'après lecture de cet article, vous saurez quelle certification correspondra le mieux à vos objectifs professionnels. Je ne pense pas être subjectif dans la mesure où j'enseigne les deux cours depuis un certain temps. En effet, j'ai donné le premier cours CCSK public en marge du cours initial de formation de formateurs à San Jose. Pour ce qui est du CCSP, j'ai participé à l'élaboration de ce cours. Je pense donc être objectif dans ma comparaison entre ces deux cours.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/24/ccsk-vs-ccsp-an-unbiased-comparison//]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//GDPR Is Coming: Will the Industry Be Ready?//"
[>img(150px,auto)[iCSA/GDPR_Prep-232x300.png]]Publié le 20 avril 2018 -- Rédigé par Jervis Hui, Senior Product Marketing Manager, Netskope

<<<
__''Le RGPD arrive : l'industrie sera-t-elle prête ?''__
//Avec l'imminence du 25 mai 2018, date de mise en conformité de GDPR, Netskope a travaillé avec la Cloud Security Alliance (CSA) pour sonder les professionnels de l'IT et de la sécurité en vue de la publication du rapport récemment publié et qui concerne la préparation et les défis de RGPD. D'après l'un des rapports "Netskope Cloud Reports", seulement 25% de tous les services cloud à travers le SaaS et le IaaaS sont prêts pour RGPD. Et avec l'omniprésence du cloud et des services Web, les entreprises font face à des défis de taille rien qu'avec le SaaS, l'IaaaS et le Web, sans parler de la myriade d'autres questions qu'elles doivent aborder pour le GDPR.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/20/gdpr-is-coming-will-the-industry-be-ready//]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
&rArr; Télécharger le rapport sur https://cloudsecurityalliance.org/download/gdpr-preparation-and-awareness-survey-report/ (lien [[direct|https://downloads.cloudsecurityalliance.org/assets/research/gdpr/GDPR_Survey.pdf]])

----
!"//Imagine a Day Without Safe Cryptography//"
[>img(150px,auto)[iCSA/SafeCrypto-cover-234x300.png]]Publié le 19 avril 2018 -- Rédigé par Jeffrey Ritter, Visiting Fellow, Kellogg College, University of Oxford

<<<
__''Imaginez une journée sans une cryptographie de confiance''__
//Tout professionnel de la sécurité, à un moment ou à un autre (ou à plusieurs reprises), se heurte à l'opposition de sa Direction face à l'évolution de la technologie. Nous savons tous que toute innovation technologique exige des adaptations dans les services de sécurité, en introduisant de nouveaux coûts liés aux changements d'équipements, aux services de tiers et aux ressources humaines. Nous savons aussi, quels que soient les nouveaux risques liés à la nouvelle technologie, que les cadres supérieurs veulent avoir l'assurance que toute nouvelle dépense produira des résultats efficaces. Aussi souvent, le résultat final est que l'entreprise bloque, reporte les dépenses et décide de mieux évaluer la gravité des risques.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/19/imagine-a-day-without-safe-cryptography//]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
&rArr; Télécharger le rapport sur https://cloudsecurityalliance.org/download/a-day-without-safe-cryptography (lien [[direct|https://downloads.cloudsecurityalliance.org/assets/research/quantum-safe-security/A_Day_without_Safe_Cryptography.pdf]])----

----
!"//Building a Foundation for Successful Cyber Threat Intelligence Exchange: A New Guide from CSA//"
[>img(150px,auto)[iCSA/Cloud-CISC-1.png]]Publié le 16 avril 2018 -- Rédigé par Brian Kelly, Co-chair/Cloud Cyber Incident Sharing Center (CISC) Working Group, et  CSO/Rackspace

<<<
__''Building a Foundation for Successful Cyber Threat Intelligence Exchange: A New Guide from CSA''__
//No organization is immune from cyber attack. Malicious actors collaborate with skill and agility, moving from target to target at a breakneck pace. With new attacks spreading from dozens of companies to a few hundred within a matter of days, visibility into...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/16/building-a-foundation-for-successful-cyber-threat-intelligence-exchange-a-new-guide-from-csa/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]


----
!"//Speeding the Secure Cloud Adoption Process//"
[>img(150px,auto)[iCSA/State_of_Cloud-2018.png]]Publié le 16 avril 2018 -- Rédigé par Vinay Patel, Chair, CSA Global Enterprise Advisory Board, et Managing Director, Citigroup

<<<
__''Speeding the Secure Cloud Adoption Process''__
//Innovators and early adopters have been using cloud for years, taking advantage of the quicker deployment, greater scalability, and cost saving of services. The growth of cloud computing continues to accelerate, offering more solutions with added features and benefits, and with proper...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/16/speeding-the-secure-cloud-adoption-process/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Cloud Security and Compliance Is a Shared Responsibility//"
[>img(200px,auto)[iCSA/iStock-467764145.jpg]]Publié le 12 avril 2018 -- Rédigé par Gail Coury, Chief Information Security Officer, Oracle

<<<
__''Cloud Security and Compliance Is a Shared Responsibility''__
//Cloud Organizations around the world are ramping up to comply with the European Union’s General Data Protection Regulation (GDPR), which will be enforced beginning on May 25, 2018, and each must have the right people, processes and technology in place to comply or else potentially face litigation and heavy...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/12/cloud-security-and-compliance-is-a-shared-responsibility/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//The Early Bird Gets the Virus//"
[>img(200px,auto)[iCSA/Image-of-businessman-touching-virus-alert-icon.jpg]]Publié le 9 avril 2018 -- Rédigé par Kevin Lee, Systems QA Engineer, Bitglass

<<<
__''The Early Bird Gets the Virus''__
//Most people have heard of the proverb, “The early bird gets the worm.” The part that many haven’t heard is the followup, “But the second mouse gets the cheese.” The latter proverb makes a lot of sense when you apply it to the current state of virus and malware...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/09/the-early-bird-gets-the-virus/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Australia’s First OAIC Breach Forecasts Grim GDPR Outcome//"
[>img(200px,auto)[iCSA/aus-to-eu.png]]Publié le 4 avril 2018 -- Rédigé par Rich Campagna, Chief Marketing Officer, Bitglass

<<<
__''Australia’s First OAIC Breach Forecasts Grim GDPR Outcome''__
//The first breach under the Office of the Australian Information Commissioner’s (OAIC) Privacy Amendment Bill was made public on March 16. While this breach means bad press for the offending party, shipping company Svitzer Australia, more frightening is the grim outcome it forecasts for organizations subject to GDPR regulations, which go into...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/04/australias-first-oaic-breach-forecasts-grim-gdpr-outcome/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//The “Ronald Reagan” Attack Allows Hackers to Bypass Gmail’s Anti-phishing Security//"
[>img(200px,auto)[iCSA/reagan.png]]Publié le 2 avril 2018 -- Rédigé par Yoav Nathaniel, ‎Customer Success Manager, Avanan

<<<
__''The “Ronald Reagan” Attack Allows Hackers to Bypass Gmail’s Anti-phishing Security''__
//We started tracking a new method hackers use to bypass Gmail’s SPF check for spear-phishing. The hackers send from an external server, the user sees an internal user (For example, your CEO) and Gmail’s SPF-check, designed to indicate the validity of the sender, shows “SPF-OK.” Why are we calling this “The Ronald Reagan” Attack...//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/04/02/the-ronald-reagan-attack-allows-hackers-to-bypass-gmails-anti-phishing-security/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Majority of Australian Data Breaches Caused by Human Error//"
[>img(200px,auto)[iCSA/map-1-300x151.png]]Publié le 18 mai 2018 -- Rédigé par Rich Campagna, Chief Marketing Officer, Bitglass

<<<
__''La majorité des atteintes à la protection des données en Australie causées par une erreur humaine''__
//Il n'y a pas si longtemps, la première violation du projet de loi sur la protection de la vie privée ([[Privacy Amendment Bill|http://parlinfo.aph.gov.au/parlInfo/download/legislation/ems/r5747_ems_ed12b5bb-d3b3-4a6a-9536-53bb459a00df/upload_pdf/6000003.pdf]]) du Commissariat à l'information de l'Australie (//Office of the Australian Information Commissioner// : "OAIC") a été rendue publique. L'OAIC est de retour et vient de publier avec son premier rapport trimestriel sur les atteintes à la protection des données à déclaration obligatoire ([[Quarterly Statistics Report of Notifiable Data Breaches|https://www.oaic.gov.au/resources/privacy-law/privacy-act/notifiable-data-breaches-scheme/quarterly-statistics/Notifiable_Data_Breaches_Quarterly_Statistics_Report_January_2018__March_.pdf]]). Bien que le rapport n'offre pas beaucoup de détails, il met en évidence quelques tendances intéressantes.
La statistique la plus notable est que parmi les 63 atteintes signalées au cours du premier trimestre, la majorité d'entre elles (51 %) était le résultat d'une "erreur humaine". Selon l'OAIC, la catégorie "erreur humaine" peut intégrer la "divulgation par inadvertance, par exemple par l'envoi d'un document contenant des renseignements personnels au mauvais destinataire". Il semble que trop peu d'organisations australiennes contrôlent des choses comme le partage avec des tiers, même si le partage (et beaucoup d'autres activités potentiellement à risques) peut être contrôlé assez facilement avec un Cloud Access Security Broker (CASB).//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/18/majority-of-australian-data-breaches-caused-by-human-error/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Bitglass Security Spotlight : LinkedIn, Vector et AWS//"
[>img(200px,auto)[iCSA/Businessman-holding-a-newspaper-while-having-breakfast-in-his-kitchen.jpg]]Publié le 17 mai 2018 -- Rédigé par Jacob Serpa, Directeur Marketing Produit, Bitglass

<<<
__''Synthèse sécurité de Bitglass : LinkedIn, Vector et AWS''__
//Voici les arthicles sur la cybersécurité de ces dernières semaines ://
* Une faille de sécurité sur LinkedIn (fonction //AutoFill//) expose les données des utilisateurs
** https://www.securityweek.com/linkedin-vulnerability-allowed-user-data-harvesting
* Une application de Vector (société énergétique néo-zélandaise) révèle les informations de clients
** https://www.msn.com/en-nz/money/company-news/personal-information-leaked-by-vector-app/ar-AAwlF7X
* Une mauvaise configuration de LocalBlox rend accessible des informations sur les utilisateurs de LocalBlox
** https://www.bleepingcomputer.com/news/security/data-firm-left-profiles-of-48-million-users-on-a-publicly-accessible-aws-server/
* PowerHammer, un logiciel malveillant de démonstration qui exfiltre les données au travers des cables électriques
** https://www.securityweek.com/hackers-can-stealthily-exfiltrate-data-power-lines
* Les applications bancaires considérées comme étant les moins sécurisées
**  https://www.zdnet.com/article/bank-sites-and-web-apps-are-most-vulnerable-to-hackers/
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/17/bitglass-security-spotlight-linkedin-vector-and-aws/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Orbitz: Why You Can’t Secure Data in the Dark//"
[>img(200px,auto)[iCSA/cloudplug.jpg]]Publié le 11 mai 2018 -- Rédigé par Jacob Serpa, Product Marketing Manager, Bitglass

<<<
__''Orbitz : Pourquoi l'on ne peut pas sécuriser les données sans visibilité''__
//Le 1^^er^^ mars 2018, Orbitz a découvert qu'un acteur malveillant avait peut-être pu voler des informations sur l'une de ses plates-formes. La plate-forme compromise hébergeait des informations sur les clients d'Orbitz (la filiale d'Expedia spécialisée dans la réservation de voyages en ligne) telles que les adresses postales, les numéros de téléphone, les adresses électroniques, les noms complets, ainsi que des détails d'environ 900.000 cartes de paiement.
Cette incident met en évidence la lutte quotidienne à laquelle de nombreuses entreprises sont confrontées.
En termes simples, les entreprises ne peuvent pas se permettre de sécuriser leurs données sans visibilité. En l'absence d'une visibilité complète, il est presque impossible de protéger les informations sensibles : vous ne pouvez pas vous défendre contre des menaces que vous ne pouvez pas voir. Lorsque les entreprises ne parviennent pas à mettre en oeuvre une journalisation automatique et complète de tous les événements impliquant les données de l'entreprise, difficile de dire que les incidents sont une fatalité.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/11/orbitz-why-you-cant-secure-data-in-the-dark/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//baseStriker: Office 365 Security Fails To Secure 100 Million Email Users//"
[>img(200px,auto)[iCSA/baseStriker-wbase.png]]Publié le 10 mai 2018 -- Rédigé par Yoav Nathaniel, Customer Success Manager, Avanan

<<<
__''BaseStriker : Office 365 Security ne parvient pas à sécuriser 100 millions d'utilisateurs d'emails''__
//Nous avons récemment découvert ce qui pourrait être la plus grande faille de sécurité d'Office 365 depuis la création du service. Contrairement aux attaques similaires qui peuvent être analysées puis bloquées, l'exploitation de cette vulnérabilité permet aux hackers de contourner complètement les mécanismes de sécurité de Microsoft, y compris ses services avancés comme ATP (//Advanced Threat Protection//) Safe Links, etc.
Le nom "baseStriker" fait référence à la méthode utilisée par les pirates pour tirer parti de cette vulnérabilité : décomposer et déguiser un lien malveillant en utilisant une balise HTML appelée balise <base> URL.
Jusqu'à présent, nous n'avons vu que des exploitations de cette vulnérabilité dans le cadre d'attaques de phishing, mais elle peut également permettre de distribuer des rançongiciels, des malwares et d'autres contenus malveillants.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/10/basestriker-office-365-security-fails-to-secure-100-million-email-users/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//One Simple Way to Avoid 57 Percent of Breaches//"
[>img(200px,auto)[iCSA/patches.jpg]]Publié le 8 mai 2018 -- Rédigé par Rich Campagna, Chief Marketing Officer, Bitglass

<<<
__''Une façon simple d'éviter 57% des atteintes à la vie privée''__
//J'ai récemment eu vent d'une enquête auprès de 3.000 professionnels de la cybersécurité commandée par la société "ServiceNow" et l'institut "Ponemon". Devinez quelle est l'une des premières statistiques qui m'a sauté aux yeux ?
"//57 % des victimes d'atteinte à la protection des données ont déclaré qu'elles ont été atteintes en raison d'une vulnérabilité non corrigée connue.//"
Du grand n'importe quoi !
Et ce nombre massif de brèches dues à l'absence de correctifs de vulnérabilité survient malgré le fait que les entreprises interrogées passent 321 heures par semaine, soit environ 8 ETPs, dans le processus de réponse aux vulnérabilités.
Donc, en moyenne, huit personnes en quête d'un processus manuel, et qui sont toujours en retard, ce qui fait que la majorité des fuites de données sont le résultat de vulnérabilités ''CONNUES'' pour lesquelles ''IL Y A UN CORRECTIF'' ?//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/08/one-simple-way-to-avoid-57-percent-of-breaches/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//The Case for CASB: Healthcare//"
[>img(200px,auto)[iCSA/Healthcare-Technology-How-Tech-Is-Changing-the-Patient-Physician-Relationship-300x204.jpg]]Publié le 1^^er^^ mai 2018 -- Rédigé par Rich Campagna, Chief Marketing Officer, Bitglass

<<<
__''Les arguments en faveur des CASBs : le secteur de la santé''__
//Au cours des deux dernières années, les Cloud Access Security Brokers (CASBs) sont passés d'une technologie naissante et à peine connue, à la norme //de facto// pour la sécurisation du cloud public dans toutes les secteurs verticaux. Au début, il est difficile de dessiner des modèles entre les industries, mais une fois que vous avez quelques centaines de déploiements d'entreprise sous votre ceinture, il devient très intéressant d'observer comment les organisations d'une industrie utilisent la même technologie (CASBs) d'une manière complètement différente des organisations d'une autre industrie.
Je suis en train de créer une série d'articles pour traiter certaines des principales différences dans l'utilisation des CASBs. Pour commencer, le secteur de la santé.//
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/05/01/the-case-for-casb-healthcare/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!"//Saturday Security Spotlight: Cryptomining, AWS, and O365//"
[>img(300px,auto)[iCSA/Businessman-holding-a-newspaper-while-having-breakfast-in-hi.jpg]]Publié le 29 mars 2018 -- Rédigé par Jacob Serpa, Directeur Marketing Produit, Bitglass

<<<
__''Plein feu dominical sur la sécurité : Cryptomining, AWS, and Office365''__
Voici les principaux articles sur la cybersécurité de ces dernières semaines:
* Le minage malveillant de monnaies virtuelles, la première des activités cybercriminelles
* De nouveaux détails émergent sur les //buckets// AWS mal sécurisés
* Le rançongiciel Data Keeper commence à se répandre
* Office 365 utilisé dans des attaques récentes de phishing de masse
* SgxSpectre attaque les enclaves Intel SGX
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/29/saturday-security-spotlight-cryptomining-aws-and-o365/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//AWS Cloud: Proactive Security and Forensic Readiness – Part 3//"
[>img(300px,auto)[iCSA/data-protection-1200x480.jpg]]Publié le 27 mars 2018 -- Rédigé par Neha Thethi, Information Security Analyst, BH Consulting

<<<
__''Cloud AWS : Sécurité proactive et préparation à l'analyse forensique (3^^ème^^ partie)''__
Il s'agit du troisième article d'une série de cinq qui fournit une liste de contrôle pour la sécurité proactive et l'état de préparation à l'analyse forensique dans un environnement Cloud Amazon. Il traite de la protection des données dans AWS.
La protection des données est un sujet très important dans les entreprises et chaud dans les organisations qui traitent les données personnelles des personnes physiques dans l'UE, car l'échéance du règlement général de l'UE sur la protection des données (GDPR) approche à grands pas.
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/27/aws-cloud-proactive-security-and-forensic-readiness-part-3/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//34 Cloud Security Terms You Should Know//"
[>img(300px,auto)[iCSA/cloud-security-101.png]]Publié le 23 mars 2018 -- Rédigé par Dylan Press, Directeur Marketing, Avanan

<<<
__''34 termes liés à la sécurité du Cloud que vous devriez connaître''__
Nous espérons que vous vous en servirez comme référence, mais aussi pour votre équipe et pour la formation de votre entreprise. Imprimez [[le document associé|https://www.avanan.com/hubfs/docs/34-Cloud-Security-Terms.pdf]] et affichez le !

Comment pouvez-vous correctement rechercher une solution de sécurité dans le Cloud, si vous ne comprenez pas ce que vous lisez ? Nous avons toujours cru que la sécurité dans les nuages devait être simple, c'est pourquoi nous avons créé Avananan. Dans le but de simplifier encore plus, nous avons créé un glossaire de 34 termes de sécurité dans le Cloud communément mal compris, et ce qu'ils signifient.
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/23/34-cloud-security-terms-you-should-know/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Are Healthcare Breaches Down Because of CASBs?//"
[>img(300px,auto)[iCSA/chart.jpg]]Publié le 19 mars 2018 -- Rédigé par Salim Hafid, Responsable Marketing Produit, Bitglass

<<<
__''Les atteintes aux données de santé sont-elles en baisse à cause des CASBs''__
Bitglass vient de publier son quatrième rapport annuel sur les atteintes au secteur de la santé (//Healthcare Breach Report//). Il porte sur les fuites de données de santé en 2017 et compare le taux de ces fuites aux années précédentes. Il y a une surprise cette année avec la chute importante du volume des fuites et de l'ampleur de chaque attaque. Notre équipe de chercheurs a entrepris de découvrir le pourquoi.

Notre rapport annuel sur le secteur de la santé est fondé sur les atteintes à la vie privée issues du ministère américain de la Santé et des Services Sociaux. Le gouvernement américain exige que tous les organismes de santé et leurs affiliés divulguent publiquement les fuites qui affectent au moins 500 personnes.
[...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/19/healthcare-breaches-casbs/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//You Are the Weakest Link -- Goodbye//"
[>img(300px,auto)[iCSA/close-up-of-a-broken-chain-and-a-paper-clip-on-white-background-300x151.jpg]]Publié le 14 mars 2018 -- Rédigé par Jacob Serpa, Product Marketing Manager, Bitglass

<<<
__''Vous êtes le maillon faible -- Au revoir.''__

La sécurité dans le nuage est une préoccupation majeure pour l'entreprise moderne. Heureusement, à condition que les organisations fassent preuve de diligence raisonnable lorsqu'elles évaluent les outils de sécurité, le stockage de données dans le Cloud peut être encore plus sûr que le stockage de données dans les locaux de l'entreprise. 
Cependant, cela nécessite le déploiement d'une variété de solutions pour sécuriser les données statiques, sécuriser l'accès aux données, sécuriser les appareils mobiles et non gérés, se défendre contre les logiciels malveillants, détecter les applications non autorisées dans le Cloud (shadow IT), et plus encore. Dans ce contexte d'adoption effrénée des outils de sécurité, les entreprises oublient souvent de soutenir le maillon le plus faible de leur chaîne de sécurité, leurs utilisateurs. [...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/14/weakest-link-goodbye/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//AWS Cloud: Proactive Security and Forensic Readiness – Part 2//"
[>img(300px,auto)[iCSA/defense-in-depth.jpg]]Publié le 13 mars 2018 -- Rédigé par Neha Thethi, Information Security Analyst, BH Consulting

<<<
__''Cloud AWS : Sécurité proactive et préparation à l'analyse forensique (2^^ème^^ partie)''__

Il s'agit du deuxième d'une série de cinq articles qui fournit une liste de contrôle pour la sécurité proactive et l'état de préparation judiciaire dans l'univers du Cloud Amazon (AWS). Cet article concerne la protection de votre infrastructure virtuelle au sein d'AWS.

La protection de toute infrastructure informatique nécessite une approche de défense en couches ou en profondeur. Les couches sont généralement divisées en couches physique, réseau (périmètrique et interne), système (ou hôte), application et données. Dans un environnement //Infrastructure as a Service// (IaaS), AWS est responsable de la sécurité "du" Cloud, y compris le périmètre physique, le matériel, le traitement logiciel, le stockage et la mise en réseau, tandis que les clients sont responsables de la sécurité "dans" le Cloud ou sur les couches au-dessus de l'hyperviseur. [...]

<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/13/aws-cloud-proactive-security-forensic-readiness-part-2/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

__''En compléments ;''__
* Le premier article de la série est sur : http://bhconsulting.ie/aws-cloud-proactive-security-forensic-readiness-five-part-best-practice/
* Le second article de la série est sur : http://bhconsulting.ie/infrastructure-level-protection-aws/
* La troisième partie est sur le site : http://bhconsulting.ie/data-protection-aws/

----
!"//Securing the Internet of Things: Devices & Networks//"
[>img[iCSA/weigand-wedding-300x126.jpg]]Publié le 12 mars 2018 -- Rédigé par Ranjeet Khanna, Director of Product Management–IoT/Embedded Security, Entrust Datacard

<<<
__''Sécuriser l'Internet des objets: les appareils et les réseaux''__
L'Internet des objets (IoT) est en train de changer la prodution industrielle pour le meilleur.

Avec les données provenant de milliards d'appareils connectés et de trillions de capteurs, les opérateurs de la chaîne d'approvisionnement et de la prodution industrielle profitent de nouveaux avantages. Il faut penser amélioreration de l'efficacité et flexibilité pour des modèles d'affaires potentiels. Mais comme l'IoT joue un rôle plus important dans toutes les industries, la sécurité doit être une priorité absolue. Voici un aperçu des quatre principaux défis à relever avant de réaliser les avantages d'une connectivité accrue.

__''Réduire les risques''__
Atténuer les risques ne doit pas toujours se faire aux dépens de la disponibilité et de la fiabilité. [...]
<<<
&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/12/securing-internet-things-devices-networks/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Zero-Day in the Cloud -- Say It Ain't So//"
[>img[iCSA/Businessman-hand-working-with-a-Cloud-Computing-diagram-on-t.jpg]]Publié le 9 mars 2018 -- Rédigé par Steve Armstrong, directeur régional des ventes, Bitglass

<<<
__''Des vulnérabilités //zéro-day// dans le Cloud... Dites moi que ce n'est pas vrai''__
Les vulnérabilités "//zéro day//" sont des failles de sécurité informatique ou logicielle inconnues du public, en particulier de ceux qui souhaitent combler ces failles, comme les fournisseurs de logiciels vulnérables.

Pour beaucoup de membres de la communauté de la sécurité informatique, le terme "//zéro day//" est synonyme de correctif de sécurité ou de mise à jour des systèmes. Prenons, par exemple, le monde des éditeurs de logiciels anti-programmes malveillants. Il y a ceux dont les solutions utilisent des signatures ou des codes de hachage pour se défendre contre les menaces. Leurs produits reçoivent en entrée un logiciel malveillant, l'analysent dans différents systèmes, font peut-être analyser le fichier par un humain, puis génèrent une signature. [...]
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/09/zero-day-cloud-say-aint/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Saturday Security Spotlight: Tesla, FedEx, & the White House//"
[>img[iCSA/Businessman-holding-a-newspaper-while-having-breakfast-in-hi.jpg]]Publié le 8 mars 2018 -- Rédigé par Jacob Serpa, Directeur Marketing Produit, Bitglass

<<<
__''Plein feu dominical sur la sécurité : Tesla, FedEx et la Maison-Blanche''__
Voici les principaux articles sur la cybersécurité de ces dernières semaines:
* Tesla a été piraté et utilisé pour extraire la cryptocurrence
* FedEx expose les données des clients dans une erreur de configuration AWS
* La Maison-Blanche publie un rapport sur la cybersécurité
* Le SEC classe la connaissance d'infractions non annoncées dans la catégorie des informations privilégiées.
* Plus de données d'Equifax volées que ce que l'on croyait initialement

__Tesla a été piraté et utilisé pour extraire de la cryptocurrence__
En ciblant une instance Tesla de Kubernetes, la console d'administration open-source de Google pour les applications cloud, les pirates ont pu infiltrer la société. Les attaquants ont ensuite obtenu des informations d'identification sur l'environnement AWS de Tesla, ont accédé à des informations propriétaires et ont commencé à exécuter des scripts pour générer de la cryptomonnaie en utilisant la puissance de calcul de Tesla. [...]
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/08/saturday-security-spotlight-tesla-fedex-white-house/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//FedRAMP – Three Stages of Vulnerability Scanning and their Pitfalls//"
[>img[iCSA/FedRamp-300x169.jpg]]Publié le 7 mars 2018 -- Rédigé par Matt Wilgus, Responsable de l'entité, Évaluation des menaces et de la vulnérabilité, Schellman & Co.

<<<
__''FedRAMP -- Les trois étapes de l'analyse des vulnérabilités et leurs pièges''__
Bien que l'analyse des vulnérabilités ne soit qu'une des exigences de contrôle de FedRAMP, c'est en fait l'un des pièges les plus fréquents en termes d'impact sur une autorisation d'exploitation (ATO : //Authorization To Operate//), car les exigences de FedRAMP attendent des fournisseurs de services cloud (CSP : //Cloud Service provider//) qu'ils aient un programme de gestion des vulnérabilités mature. Un CSP doit avoir les personnes adaptées, les bons processus et les bonnes technologies en place et doit faire preuve de maturité pour les trois. Les CSPs qui ont plus de facilité avec les exigences d'analyse des vulnérabilités suivent une approche similaire, qui peut être mieux articulée en décomposant les attentes en trois étapes. [...]
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/07/fedramp-three-stages-vulnerability-scanning-pitfalls/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//Securing the Internet of Things: Connected Cars//"
[>img[iCSA/CarSmile-300x126.jpg]]Publié le 5 mars 2018 -- Rédigé par Ranjeet Khanna, Director of Product Management–IoT/Embedded Security, Entrust DatacardDatacard

<<<
__''Sécuriser l'Internet des objets: Voitures connectées''__
Le déploiement de la sécurité et de la sûreté dans la conception automobile va bien au-delà des essais de collision.

D'ici 2022, on s'attend à ce que le marché mondial de l'Internet des Objets (IoT) dans le secteur automobile atteigne 82,79 milliards de dollars, et les constructeurs se précipitent sur cette opportunité. Bien que les calculateurs embarqués et les technologies réseaux existent depuis les années 1980, l'avènement de la connectivité ouvre un éventail de nouvelles options pour les constructeurs automobiles. De la détection avancée des collisions et des diagnostics prédictifs aux systèmes de divertissement qui chargent les mélodies préférées du conducteur dès qu'il s'assied, les voitures connectées sont prêtes à améliorer l'expérience du consommateur. [...]
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/05/securing-internet-things-connected-cars/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]

----
!"//CASBs and Education’s Flight to the Cloud//"
[>img[iCSA/higher_education-grey-1-300x206.jpg]]Publié le 1er mars 2018 -- Rédigé par Jacob Serpa, Directeur Marketing Produits, Bitglass

<<<
__''L'envol des CASBs et du monde de l'éducation dans le Cloud''__
Le Cloud fait de plus en plus partie intégrante des entreprises qui recherchent productivité et flexibilité. Pour l'enseignement supérieur, le Cloud permet la création de cours en ligne, la collaboration dynamique sur des documents de recherche, etc. Comme de nombreux services cloud comme la [[G Suite|https://www.bitglass.com/g-suite-security]] sont offerts gratuitement aux établissements d'enseignement, l'adoption est encore plus simple. Toutefois, dans tous les cas d'utilisation multiple en éducation, des solutions de sécurité complètes doivent être utilisées pour protéger les données où qu'elles se trouvent. [...]
<<<

&rArr; Lire [[la suite|https://blog.cloudsecurityalliance.org/2018/03/01/casbs-educations-flight-cloud/]] sur le [[blog de la Cloud Security Alliance|https://blog.cloudsecurityalliance.org/]]
----
!Le [[Chamitre Français|CSA-FR]] de la[[Cloud Security Alliance]]
[>img(200px,auto)[i/cloud-security-alliance.png]]
Le [[Chapitre français|CSA-FR]] de la [[Cloud Security Alliance]] a été créé en décembre 2010 par ''[[Olivier Caleff|https://www.linkedin.com/in/caleff]]'' et ''[[Pierre Vacherand|https://www.linkedin.com/in/pierrevacherand/]]''.

Les activités ont tourné au ralenti entre 2013 et 2017, mais elles reprennent en 2018.

__Contact :__ [img(200px,auto)[i/Email-CSA_FR.png]]

!Les partenariats
[>img(200px,auto)[i/ISEP-FC.jpg]]
Depuis 2012, le [[Chapitre français|CSA-FR]] de la [[Cloud Security Alliance]] a établi un partenariat en matière de formation avec l'[[ISEP Formation Continue|https://www.isep.fr/masteres-specialises/]] et assure notamment l'enseignement de la partie "Sécurité du Cloud" dans le cadre du Mastère Spécialisé [[Expertise Cloud Computing|https://formation-continue.isep.fr/cloud-computing/]].
La 6^^ème^^ promotion a commencé son cursus en Septembre 2017.
La [[Cloud Security Alliance]] (CSA) est une organisation à but non lucratif qui a pour mission :
* de promouvoir de bonnes pratiques en matière d'assurance de la sécurité dans le Cloud Computing
* de fournir des formations sur les utilisations du Cloud Computing pour aider à sécuriser toutes les autres formes d'informatique
La [[Cloud Security Alliance]] est dirigée par une vaste coalition de praticiens de l'industrie, d'entreprises, d'associations et d'autres intervenants clés.

__Historique__
Les enjeux et opportunités du cloud computing ont fait l'objet d'une attention particulière en 2008 au sein de la communauté de la sécurité de l'information.
Lors du forum CISO de l'ISSA à Las Vegas, en novembre 2008, le concept de d'une Alliance pour la sécurité du Cloud Computing ([[Cloud Security Alliance]]) a vu le jour. Après une présentation des tendances émergentes par ''[[Jim Reavis|https://www.linkedin.com/in/jimreavis/]]'', dont un appel à l'action pour la sécurisation du cloud computing, ''Jim Reavis'' et ''[[Nils Puhlmann|https://www.linkedin.com/in/npuhlmann/]]'' ont présenté la mission et la stratégie initiales du CSA. Une série de réunions organisationnelles avec des chefs de file de l'industrie au début de décembre 2008 a officialisé la fondation du CSA.
Le travail de sensibilisation auprès de la communauté de la sécurité de l'information pour créer un support de travail initial en vue de la Conférence RSA 2009 a donné lieu à des échanges etnre des dizaines de bénévoles pour la recherche, l'auteur, la rédaction et la révision du premier livre blanc.

__Mission__
Promouvoir l'utilisation des meilleures pratiques pour fournir une assurance de sécurité dans le Cloud Computing, et fournir de l'éducation sur les utilisations du Cloud Computing pour aider à sécuriser toutes les autres formes d'informatique.

__Site Web__
Le site Web de la [[Cloud Security Alliance]] est: https://www.cloudsecurityalliance.org
/*{{{*/
#slideHeader { color: #00f; padding: 1.5em; background-image: url('i/ISEPfc.jpg'); background-repeat: no-repeat; background-position: right; }
#slideFooter { color: #00f}
/* body { background-image: url('i/ISEP-FC.jpg'); color: #000;} */
.tiddler { background: transparent; padding: 1em 1em 0.5em 1em;}
#controlBar .button { background: transparent; color: #00f; border: #00f }
#controlBar .button:hover { background: #fff; color: #000 }
#slideClock { background: transparent; color: #00f; margin: 0 0.5em 0 0.5em; padding: 0 0.25em 0 0.25em; }
/* navigator always visible*/
.slideFooterOff #navigator{ visibility: visible; }
.slideFooterOff #buttonBar{ visibility: hidden; }
/*}}}*/
{{floatC{[img[i/Email-CSA_FR.png]]
[img[i/Cloud_Question.png]]}}}
/***
|Name|CopyTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#CopyTiddlerPlugin|
|Version|3.2.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|Quickly create a copy of any existing tiddler|
!!!Usage
<<<
The plugin automatically updates the default (shadow) ToolbarCommands definitions to insert the ''copyTiddler'' command, which will appear as ''copy'' when a tiddler is rendered.  If you are already using customized toolbar definitions, you will need to manually add the ''copyTiddler'' toolbar command to your existing ToolbarCommands tiddler, e.g.:
{{{
|EditToolbar|... copyTiddler ... |
}}}
When the ''copy'' command is selected, a new tiddler is created containing an exact copy of the current text/tags/fields, using a title of "{{{TiddlerName (n)}}}", where ''(n)'' is the next available number (starting with 1, of course).  If you copy while //editing// a tiddler, the current values displayed in the editor are used (including any changes you may have already made to those values), and the new tiddler is immediately opened for editing.

The plugin also provides a macro that allows you to embed a ''copy'' command directly in specific tiddler content:
{{{
<<copyTiddler TidderName label:"..." prompt:"...">>
}}}
where
* ''TiddlerName'' (optional)<br>specifies the //source// tiddler to be copied.  If omitted, the current containing tiddler (if any) will be copied.
* ''label:"..."'' (optional)<br>specifies text to use for the embedded link (default="copy TiddlerName")
* ''prompt:"..."'' (optional)<br>specifies mouseover 'tooltip' help text for link
//Note: to use non-default label/prompt values with the current containing tiddler, use "" for the TiddlerName//
<<<
!!!Configuration
<<<
<<option chkCopyTiddlerDate>> use date/time from existing tiddler (otherwise, use current date/time)
{{{<<option chkCopyTiddlerDate>>}}}
<<<
!!!Revisions
<<<
2010.11.30 3.2.6 use story.getTiddler()
2009.06.08 3.2.5 added option to use timestamp from source tiddler
2009.03.09 3.2.4 fixed IE-specific syntax error
2009.03.02 3.2.3 refactored code (again) to restore use of config.commands.copyTiddler.* custom settings
2009.02.13 3.2.2 in click(), fix calls to displayTiddler() to use current tiddlerElem and use getTiddlerText() to permit copying of shadow tiddler content
2009.01.30 3.2.1 fixed handling for copying field values when in edit mode
2009.01.23 3.2.0 refactored code and added {{{<<copyTiddler TiddlerName>>}}} macro
2008.12.18 3.1.4 corrected code for finding next (n) value when 'sparse' handling is in effect
2008.11.14 3.1.3 added optional 'sparse' setting (avoids 'filling in' missing numbers that may have been previously deleted)
2008.11.14 3.1.2 added optional 'zeroPad' setting
2008.11.14 3.1.1 moved hard-coded '(n)' regex into 'suffixPattern' object property so it can be customized
2008.09.26 3.1.0 changed new title generation to use '(n)' suffix instead of 'Copy of' prefix
2008.05.20 3.0.3 in handler, when copying from VIEW mode, create duplicate array from existing tags array before saving new tiddler.
2007.12.19 3.0.2 in handler, when copying from VIEW mode, duplicate custom fields before saving new tiddler.
2007.09.26 3.0.1 in handler, use findContainingTiddler(src) to get tiddlerElem (and title).  Allows 'copy' command to find correct tiddler when transcluded using {{{<<tiddler>>}}} macro or enhanced toolbar inclusion (see [[CoreTweaks]])
2007.06.28 3.0.0 complete re-write to handle custom fields and alternative view/edit templates
2007.05.17 2.1.2 use store.getTiddlerText() to retrieve tiddler content, so that SHADOW tiddlers can be copied correctly when in VIEW mode
2007.04.01 2.1.1 in copyTiddler.handler(), fix check for editor fields by ensuring that found field actually has edit=='text' attribute
2007.02.05 2.1.0 in copyTiddler.handler(), if editor fields (textfield and/or tagsfield) can't be found (i.e., tiddler is in VIEW mode, not EDIT mode), then get text/tags values from stored tiddler instead of active editor fields.  Allows use of COPY toolbar directly from VIEW mode
2006.12.12 2.0.0 completely rewritten so plugin just creates a new tiddler EDITOR with a copy of the current tiddler EDITOR contents, instead of creating the new tiddler in the STORE by copying the current tiddler values from the STORE.
2005.xx.xx 1.0.0 original version by Tim Morgan
<<<
!!!Code
***/
//{{{
version.extensions.CopyTiddlerPlugin= {major: 3, minor: 2, revision: 6, date: new Date(2010,11,30)};

// automatically tweak shadow EditTemplate to add 'copyTiddler' toolbar command (following 'cancelTiddler')
config.shadowTiddlers.ToolbarCommands=config.shadowTiddlers.ToolbarCommands.replace(/cancelTiddler/,'cancelTiddler copyTiddler');

if (config.options.chkCopyTiddlerDate===undefined) config.options.chkCopyTiddlerDate=false;

config.commands.copyTiddler = {
	text: '[cp]',
	hideReadOnly: true,
	tooltip: 'Make a copy of this tiddler',
	notitle: 'this tiddler',
	prefix: '',
	suffixText: ' (%0)',
	suffixPattern: / \(([0-9]+)\)$/,
	zeroPad: 0,
	sparse: false,
	handler: function(event,src,title)
		{ return config.commands.copyTiddler.click(src,event); },
	click: function(here,ev) {
		var tiddlerElem=story.findContainingTiddler(here);
		var template=tiddlerElem?tiddlerElem.getAttribute('template'):null;
		var title=here.getAttribute('from');
		if (!title || !title.length) {
			if (!tiddlerElem) return false;
			else title=tiddlerElem.getAttribute('tiddler');
		}
		var root=title.replace(this.suffixPattern,''); // title without suffix
		// find last matching title
		var last=title;
		if (this.sparse) { // don't fill-in holes... really find LAST matching title
			var tids=store.getTiddlers('title','excludeLists');
			for (var t=0; t<tids.length; t++) if (tids[t].title.startsWith(root)) last=tids[t].title;
		}
		// get next number (increment from last matching title)
		var n=1; var match=this.suffixPattern.exec(last); if (match) n=parseInt(match[1])+1;
		var newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]);
		// if not sparse mode, find the next hole to fill in...
		while (store.tiddlerExists(newTitle)||story.getTiddler(newTitle))
			{ n++; newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]); }
		if (!story.isDirty(title)) { // if tiddler is not being EDITED
			// duplicate stored tiddler (if any)
			var text=store.getTiddlerText(title,'');
			var who=config.options.txtUserName;
			var when=new Date();
			var newtags=[]; var newfields={};
			var tid=store.getTiddler(title); if (tid) {
				if (config.options.chkCopyTiddlerDate) var when=tid.modified;
				for (var t=0; t<tid.tags.length; t++) newtags.push(tid.tags[t]);
				store.forEachField(tid,function(t,f,v){newfields[f]=v;},true);
			}
	                store.saveTiddler(newTitle,newTitle,text,who,when,newtags,newfields,true);
			story.displayTiddler(tiddlerElem,newTitle,template);
		} else {
			story.displayTiddler(tiddlerElem,newTitle,template);
			var fields=config.commands.copyTiddler.gatherFields(tiddlerElem); // get current editor fields
			var newTiddlerElem=story.getTiddler(newTitle);
			for (var f=0; f<fields.length; f++) {  // set fields in new editor
				if (fields[f].name=='title') fields[f].value=newTitle; // rename title in new tiddler
				var fieldElem=config.commands.copyTiddler.findField(newTiddlerElem,fields[f].name);
				if (fieldElem) {
					if (fieldElem.getAttribute('type')=='checkbox')
						fieldElem.checked=fields[f].value;
					else 
						fieldElem.value=fields[f].value;
				}
			}
		}
		story.focusTiddler(newTitle,'title');
		return false;
	},
	findField: function(tiddlerElem,field) {
		var inputs=tiddlerElem.getElementsByTagName('input');
		for (var i=0; i<inputs.length; i++) {
			if (inputs[i].getAttribute('type')=='checkbox' && inputs[i].field == field) return inputs[i];
			if (inputs[i].getAttribute('type')=='text' && inputs[i].getAttribute('edit') == field) return inputs[i];
		}
		var tas=tiddlerElem.getElementsByTagName('textarea');
		for (var i=0; i<tas.length; i++) if (tas[i].getAttribute('edit') == field) return tas[i];
		var sels=tiddlerElem.getElementsByTagName('select');
		for (var i=0; i<sels.length; i++) if (sels[i].getAttribute('edit') == field) return sels[i];
		return null;
	},
	gatherFields: function(tiddlerElem) { // get field names and values from current tiddler editor
		var fields=[];
		// get checkboxes and edit fields
		var inputs=tiddlerElem.getElementsByTagName('input');
		for (var i=0; i<inputs.length; i++) {
			if (inputs[i].getAttribute('type')=='checkbox')
				if (inputs[i].field) fields.push({name:inputs[i].field,value:inputs[i].checked});
			if (inputs[i].getAttribute('type')=='text')
				if (inputs[i].getAttribute('edit')) fields.push({name:inputs[i].getAttribute('edit'),value:inputs[i].value});
		}
		// get textareas (multi-line edit fields)
		var tas=tiddlerElem.getElementsByTagName('textarea');
		for (var i=0; i<tas.length; i++)
			if (tas[i].getAttribute('edit')) fields.push({name:tas[i].getAttribute('edit'),value:tas[i].value});
		// get selection lists (droplist or listbox)
		var sels=tiddlerElem.getElementsByTagName('select');
		for (var i=0; i<sels.length; i++)
			if (sels[i].getAttribute('edit')) fields.push({name:sels[i].getAttribute('edit'),value:sels[i].value});
		return fields;
	}
};
//}}}
// // MACRO DEFINITION
//{{{
config.macros.copyTiddler = {
	label: 'copy',
	prompt: 'Make a copy of %0',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var title=params.shift();
		params=paramString.parseParams('anon',null,true,false,false);
		var label	=getParam(params,'label',this.label+(title?' '+title:''));
		var prompt	=getParam(params,'prompt',this.prompt).format([title||this.notitle]);
		var b=createTiddlyButton(place,label,prompt,
			function(ev){return config.commands.copyTiddler.click(this,ev)});
		b.setAttribute('from',title||'');
	}
};
//}}}
[[Bienvenue]][[Blog]]
|>|>|!|
| Hebdomadaire|Mise à jour du site||
| 12 mars 2018|Réouverture du blog|[[lien|Blog]]|
| 1^^er^^ mars 2018|Réouverture du site |[[lien|Actualités 2018]]|
|>|>|!|
TiddlyWiki FireFox TiddlyTools TiddlyTech HowTo $1
/***
|Name|DisableWikiLinksPlugin|
|Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
!!!!!Usage
<<<
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.  You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.  

Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<<
!!!!!Configuration
<<<
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
<<<
!!!!!Revisions
<<<
2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).  
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};

if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].coreHandler=config.formatters[i].handler;
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
		// check for excluded Tiddler
		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// check for specific excluded wiki words
		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);
		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not enabled, just do standard WikiWord link formatting
		if (!config.options.chkDisableWikiLinks)
			return this.coreHandler(w);
		// just return text without linking
		w.outputText(w.output,w.matchStart+skip,w.nextMatch)
	}
}

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
	// if all automatic links are not disabled, just return results from core function
	if (!config.options.chkDisableWikiLinks)
		return this.coreAutoLinkWikiWords.apply(this,arguments);
	return false;
}

Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	this.disableWikiLinks_changed.apply(this,arguments);
	// remove excluded wiki words from links array
	var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
	if (t.length) for (var i=0; i<t.length; i++)
		if (this.links.contains(t[i]))
			this.links.splice(this.links.indexOf(t[i]),1);
};
//}}}
[>img(500px,auto)[iCSA/DownloadCSA.jpg]]La page de téléchargement générale de tous les documents de la [[Cloud Security Alliance]] est la suivante : https://cloudsecurityalliance.org/download/

Parmi la centaine de documents publiés par la [[Cloud Security Alliance]], plusieurs font office de référence ou doivent être connus, aparmi lesquels :
# ''Security Guidance for Critical Areas of Focus in Cloud Computing'' +++[détails »]
|<<tiddler "Groupe de Travail - Security Guidance">> |
=== 

# ''Cloud Controls Matrix'' +++[détails »] |<<tiddler "Groupe de Travail - Cloud Controls Matrix">> | ===

# ''Cloud Computing Top Threats'' +++[détails »] |<<tiddler "Groupe de Travail - Top Threats">> | ===

# ''Mitigating Risk'' +++[»]> [>img(200px,auto)[iCSA/CSA-MitigatingRisk.jpg]] ** Date : 17 août 2016 ** Page de téléchargement : https://cloudsecurityalliance.org/download/mitigatingrisk/ (après inscription) ===

# ''State of Cloud Security 2016'' +++[»]> [>img(200px,auto)[iCSA/CSA-StateCloud2016.jpg]] ** Date : 27 février 2016 ** Page de téléchargement : https://cloudsecurityalliance.org/download/state-of-cloud-security-2016/ ** Lien direct : https://downloads.cloudsecurityalliance.org/assets/board/CSA-GEAB-State-of-Cloud-Security-2016.pdf ===

# ''Security Considerations for Private vs. Public Clouds'' +++[»]> [>img(200px,auto)[iCSA/CSA-ConsiderationsPrivatePublicClouds.png]] ** Date : 15 juin 2015 ** Page de téléchargement : https://cloudsecurityalliance.org/download/security-considerations-for-private-vs-public-clouds/ (après inscription) ===
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<div class='editor' macro='edit text'></div>
<!--}}}-->
----
[img(200px,auto)[i/Email-CSA_FR.png]]
<<tiddler .ToggleRightSidebar>>
/***
|''Name''|ForEachTiddlerPlugin|
|''Version''|1.2.4|
|''Forked from''|[[abego.ForEachTiddlerPlugin|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin]], by Udo Borkowski|
|''Author''|Yakov Litvin|
|''CoreVersion''|2.6.2|
|''CoreVersion note''|Although 2.6.2 is theoretically minimal TW version required for the correct operation, tests showed that the plugin works in 2.6.0, too.|
***/
//{{{
(function(){

// Only install once
if (version.extensions.ForEachTiddlerPlugin) {
	alert("Warning: more than one copy of ForEachTiddlerPlugin is set to be launched");
	return;
} else
	version.extensions.ForEachTiddlerPlugin = {
		source: "[repository url here]",
		licence: "[licence url here]",
		copyright: "Copyright (c) Yakov Litvin, 2012 [url of the meta page]"
	};

//============================================================================
// forEachTiddler Macro
//============================================================================

// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {

	actions: {
		addToList: {},
		write: {}
	}
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {

	// --- Parsing ------------------------------------------

	var parsedParams = this.parseParams(params);
	if (parsedParams.errorText) {
		this.handleError(place, parsedParams.errorText);
		return;
	}//else
		parsedParams.place = place;
		parsedParams.inTiddler = tiddler? tiddler : getContainingTiddler(place);


	// --- "Static" processing ------------------------------

	// Choose the action
	parsedParams.actionName = parsedParams.actionName ? parsedParams.actionName : "addToList";
	var actionName = parsedParams.actionName;
	var action = this.actions[actionName];
	if (!action) {
		this.handleError(place, "Unknown action '"+actionName+"'.");
		return;
	}

	// Create the element
	var element = document.createElement(action.element);
	jQuery(element).attr({ refresh: "macro", macroName: macroName }).data(parsedParams);
	place.appendChild(element);

	// --- "Dynamic" processing -----------------------------

	this.refresh(element);
};

config.macros.forEachTiddler.refresh = function(element) {

	var parsedParams = jQuery(element).data(),
	    action = this.actions[parsedParams.actionName];

	jQuery(element).empty();
	try {
		var tiddlersAndContext = this.getTiddlersAndContext(parsedParams);

		// Perform the action
		action.handler(element, tiddlersAndContext.tiddlers,
				parsedParams.actionParameter, tiddlersAndContext.context);
	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @param parameter  holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						filter
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional.
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.filter, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;

	// Get the tiddlers, as defined by the filter and the whereClause
	var tiddlers = this.findTiddlers(parameter.filter, parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause)
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);

	return {tiddlers: tiddlers, context: context};
};

// ---------------------------------------------------------------------------
//  The actions
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.element = "ul";
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {

	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		place.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

var parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}

		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.element = "span";
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {

	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null)
		p += 2;
	var endExpression = parseNamedParameter("end", parameter, p);
	if (endExpression !== null)
		p += 2;
	var noneExpression = parseNamedParameter("none", parameter, p);
	if (noneExpression !== null)
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}

		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);

	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}

	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else
		wikify(text, place, null/* highlightRegExp */, context.inTiddler);
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.parseParams = function(params) {

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length)
			return { errorText: "TiddlyWiki path expected behind 'in'." };
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the filter parameter
	if ((i < params.length) && params[i] == "filter") {
		i++;
		var filter = (i < params.length) ? params[i] : undefined;
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true;
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length)
			return { errorText: "sortClause missing behind 'sortBy'." };
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action.
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
		if (!config.macros.forEachTiddler.actions[params[i]])
			return { errorText: "Unknown action '"+params[i]+"'." };
		else {
			actionName = params[i];
			i++;
		}
	}

	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);

	return	{
			filter:		 filter,
			whereClause:	 whereClause,
			sortClause:	 sortClause,
			sortAscending:	 sortAscending,
			actionName:	 actionName,
			actionParameter: actionParameter,
			scriptText:	 scriptText,
			tiddlyWikiPath:	 tiddlyWikiPath
		}
};

var getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null;
	return title ? store.getTiddler(title) : null;
};


// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, filterParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place		: placeParam,
		filter		: filterParam,
		whereClause	: whereClauseParam,
		sortClause	: sortClauseParam,
		sortAscending	: sortAscendingParam,
		script		: scriptText,
		actionName	: actionNameParam,
		actionParameter	: actionParameterParam,
		tiddlyWikiPath	: tiddlyWikiPathParam,
		inTiddler	: inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler	: getContainingTiddler(placeParam) //the tiddler showing the forEachTiddler result
	};
};


// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;

	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}

	var tiddlyWiki = new TiddlyWiki();

	if (!tiddlyWiki.importTiddlyWiki(content))
		throw "File '"+path+"' is not a TiddlyWiki.";
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};


// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(filter, whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	if(filter) {
		var tids = tiddlyWiki.filterTiddlers(filter);
		for(var i = 0; i < tids.length; i++)
			if(func(tids[i], context, undefined, undefined))
				result.push(tids[i]);
	} else
		tiddlyWiki.forEachTiddler(function(title,tiddler) {
			if(func(tiddler, context, undefined, undefined))
				result.push(tiddler);
		});
	return result;
};


// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {

	return ((tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
			? 0
			: ((tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1
			   : +1))
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {

	return ((tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
			? 0
			: ((tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1
			   : -1))
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared
	// we pre-calculate the sortValue for every item in the array and store it in a
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.
	for (i = 0; i < tiddlers.length; i++)
		delete tiddlers[i].forEachTiddlerSortValue;
};


// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};


// Internal.
//
// Encodes the given string.
//
// Replaces
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Handles relative links, too.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// code adapted from SharedTiddlersPlugin to handle relative paths

	var originalAbsolutePath = originalPath;
	if(originalAbsolutePath.search(/^((http(s)?)|(file)):/) != 0) {
	// no protocol prefix..

		if (originalAbsolutePath.search(/^(.\:\\)|(\\\\)|(\/)/) != 0){// is relative?
		// as Unix filesystem root is "/", urls starting with it are not considered as relative

			var currentUrl  = document.location.toString();
			var currentPath = (currentUrl.lastIndexOf("/") > -1) ?
				currentUrl.substr(0, currentUrl.lastIndexOf("/") + 1) :
				currentUrl + "/";
			originalAbsolutePath = currentPath + originalAbsolutePath;
		} else
		// an "absolute" path to a local file. Prefix it with file://

			originalAbsolutePath = "file://" + originalAbsolutePath;

		// replace every \ by a /, to cover Windows style pathes
		originalAbsolutePath = originalAbsolutePath.replace(/\\/mg,"/");
	}
	return getLocalPath(originalAbsolutePath);
};


// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

// ---------------------------------------------------------------------------
// fet alias for the the forEachTiddler Macro
// ---------------------------------------------------------------------------

config.macros.fet = config.macros.forEachTiddler;

//============================================================================
// utilities for String and Tiddler objects useful in fet macros
//============================================================================

// Returns true if the string starts with the given prefix, false otherwise.
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};

// Returns true if the string ends with the given suffix, false otherwise.
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};

// Returns true when the string contains the given substring, false otherwise.
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};
})();

// Returns the slice value if it is present or defaultText otherwise
//
Tiddler.prototype.getSlice = function(sliceName,defaultText) {

	var re = TiddlyWiki.prototype.slicesRE;
	re.lastIndex = 0;
	var m = re.exec(this.text);
	while(m) {
		if(m[2]) {
			if(m[2] == sliceName)
				return m[3];
		} else {
			if(m[5] == sliceName)
				return m[6];
		}
		m = re.exec(this.text);
	}
	return defaultText;
};

// Returns the section value if it is present or defaultText otherwise
//
Tiddler.prototype.getSection = function(sectionName,defaultText) {

	var beginSectionRegExp = new RegExp("(^!{1,6}[ \t]*" + sectionName.escapeRegExp() + "[ \t]*\n)","mg"),
	    sectionTerminatorRegExp = /^!/mg;

	var match = beginSectionRegExp.exec(this.text), sectionText;
	if(match) {
		sectionText = this.text.substr(match.index+match[1].length);
		match = sectionTerminatorRegExp.exec(sectionText);
		if(match)
			sectionText = sectionText.substr(0,match.index-1); // don't include final \n
		return sectionText
	}
	return defaultText;
};
//}}}
[img[iCSA/WG-CCM.jpg]]
La [[Cloud Security Alliance]] ''Cloud Controls Matrix'' (''CCM'') est spécialement conçue pour décliner les principes de sécurité fondamentaux afin de guider les fournisseurs d'énergie cloud et aider les clients potentiels à évaluer le risque global de sécurité d'un fournisseur d'énergie cloud.
La ''CCM'' de l'ASC fournit un cadre de contrôle qui permet une meilleure compréhension des concepts et des principes de sécurité qui sont alignés sur les directives de la [[Cloud Security Alliance]] dans 13 domaines.
Les fondements de la ''CCM'' reposent sur sa relation avec d'autres normes, règlements et cadres de contrôle de sécurité acceptés par l'industrie, tels que ISO 27001/27002, ISACA COBIT, PCI, NIST, Jericho Forum et NERC CIP. Elle permet ainsi de fournir une orientation de contrôle interne pour les attestations de rapports de contrôle.

En tant que cadre, la ''Cloud Controls Matrix'' fournit la structure, les détails et la clarté nécessaires en matière de sécurité de l'information adaptée à l'industrie du Cloud Computing.
La ''CCM'' :
* met particulèrement l'accent sur les exigences de contrôle de la sécurité de l'information,
* réduit et identifie les menaces et les vulnérabilités liées au Cloud Computing,
* fournit une sécurité normalisée et une gestion du risque opérationnel,
* cherche à normaliser les attentes en matière de sécurité, la taxonomie et la terminologie du Cloud Computing, et les mesures de sécurité mises en œuvre.

__Liens :__
* La page du groupe de travail ''Cloud Controls Matrix'' : https://cloudsecurityalliance.org/group/cloud-controls-matrix/
* La page de téléchargement de la ''Cloud Controls Matrix'' : https://cloudsecurityalliance.org/group/cloud-controls-matrix/#_downloads
* Le lien direct vers la version 3.0.1 de la ''Cloud Controls Matrix'' publiée le 03.10.2017 : [[CSA_CCM_v.3.0.1-09-01-2017_FINAL.xlsx|https://cloudsecurityalliance.org/download/cloud-controls-matrix-v3-0-1/]]
[img(701px,auto)[iCSA/guidance-v4-header.jpg]]
Le document "Guide de sécurité pour les domaines critiques de l'informatique dans le Cloud Computing" (//Security Guidance for Critical Areas of Focus in Cloud Computing//) de la [[Cloud Security Alliance]] en est à quatrième version. Il a été conçu sur les versions précédentes (v1 et v2 en 2009, v3 en 2011), des actions de recherche spécifiques, la participation des membres de le Cloud Securitty Alliance, des groupes de travail et des experts de l'industrie au sein de notre communauté. Cette version intègre les avancées dans le Cloud, la sécurité et les technologies de support, réfléchit sur les pratiques réelles de sécurité dans le Cloud, intègre les derniers projets de recherche de la [[Cloud Security Alliance]] et offre des conseils pour les technologies connexes.

L'objectif de la quatrième version du guide ''Security Guidance for Critical Areas of Focus in Cloud Computing'' est à la fois de fournir des conseils et être source d'inspiration pour soutenir les objectifs métiers tout en gérant et en atténuant les risques associés à l'adoption de la technologie du Cloud Computing.

__Liens :__
* La page de présentation du document ''Security Guidance for Critical Areas of Focus in Cloud Computing''
** https://cloudsecurityalliance.org/group/security-guidance/
* La page de téléchargement du document ''Security Guidance for Critical Areas of Focus in Cloud Computing'' version 4 publié le 26.07.2017
** https://cloudsecurityalliance.org/download/security-guidance-v4/ (nécessite une inscription)
* Document "Security Guidance v4.0 ''Info Sheet''" du 26.07.''2017'' :
** https://cloudsecurityalliance.org/download/security-guidance-v4-info-sheet/
* Document "New Security Guidance for Early Adopters of the IoT" du 20.04.2015 :
** https://cloudsecurityalliance.org/download/new-security-guidance-for-early-adopters-of-the-iot/
* Document "Security Guidance for Critical Areas of Focus in Cloud Computing ''V3.0''" du 14.11.''2011'' :
** https://cloudsecurityalliance.org/download/security-guidance-for-critical-areas-of-focus-in-cloud-computing-v3/
* Document "Security Guidance for Critical Areas of Focus in Cloud Computing ''V2.0''" du 02.12.''2009'' :
** https://cloudsecurityalliance.org/download/security-guidance-for-critical-areas-of-focus-in-cloud-computing-v2-0/
* Document "Security Guidance for Critical Areas of Focus in Cloud Computing ''V1.0''" du 01.04.''2009'' :
** https://cloudsecurityalliance.org/download/security-guidance-for-critical-areas-of-focus-in-cloud-computing-v1-0/

[img(701px,auto)[iCSA/moving-domains.jpg]]
[>img(160px,auto)[iCSA/TopThreats_logo.png]]
Le groupe de travail de la [[Cloud Security Alliance]] sur les principales menaces (//Top Threats//) a pour objet fournir la vision éclairée des experts des risques, des menaces et des vulnérabilités sur la sécurité dans le Cloud.
Il s'agit de permettre une bonne compréhension de cette problématique de sécurité afin de pouvoir prendre des décisions en toute connaissance de cause, en matière de gestion des risques et de stratégies d'adoption du Cloud Computing.

Le groupe de travail a déjà publié 3 documents. Le prochain devrait être publié mi 2018.
# "//''The Notorious Nine: Cloud Computing Top Threats in 2013''//" [>img(auto,200px)[iCSA/2013-notorious-nine.jpg]]
** Publication : ''24.02.2013''
** Identification de 9 menaces critiques pour 2013 :
*** 1. Data Breaches
*** 2. Data Loss
*** 3. Account Hijacking
*** 4. Insecure APIs
*** 5. Denial of Service
*** 6. Malicious Insiders
*** 7. Abuse of Cloud Services
*** 8. Insufficient Due Diligence
*** 9. Shared Technology Issues
** __Liens :__
*** https://cloudsecurityalliance.org/download/the-notorious-nine-cloud-computing-top-threats-in-2013/
*** https://downloads.cloudsecurityalliance.org/initiatives/top_threats/The_Notorious_Nine_Cloud_Computing_Top_Threats_in_2013.pdf 

# "//''The Treacherous Twelve’ Cloud Computing Top Threats in 2016''//" [>img(auto,200px)[iCSA/2016-treacherous-twelve-top-threats.jpg]] ** Publication : ''29.02.2016'' ** Ajout de 3 nouvelles menaces critiques pour 2016 : *** 1. //Data Breaches// *** 2. Weak Identity, Credential and Access Management *** 3. //Insecure APIs// *** 4. System and Application Vulnerabilities *** 5. //Account Hijacking// *** 6. //Malicious Insiders// *** 7. Advanced Persistent Threats (APTs) *** 8. //Data Loss// *** 9. //Insufficient Due Diligence// *** 10. //Abuse// and Nefarious Use //of Cloud Services// *** 11. //Denial of Service// *** 12. //Shared Technology Issues// ** __Liens :__ *** https://cloudsecurityalliance.org/download/the-treacherous-twelve-cloud-computing-top-threats-in-2016/ *** https://downloads.cloudsecurityalliance.org/assets/research/top-threats/Treacherous-12_Cloud-Computing_Top-Threats.pdf

# "//''Top Threats to Cloud Computing Plus: Industry Insights''//" [>img(auto,200px)[iCSA/2017-top-threats-12.jpg]] ** Publication : ''20.10.2017'' ** Exemples de 21 incidents de sécurité lié au Cloud Computing, et utilisation du modèle ''STRIDE'' de Microsoft *** S → //''S''poofing identity// → Usurpation d'identité *** T → //''T''ampering with data// → Altération de données *** R → //''R''epudiation// → Répudiation *** I → //''I''nformation Disclosure// → Divulgation d'information *** D → //''D''enial of service// → Déni de service *** E → //''E''levation of privilege// → Élévation de privilèges ** __Liens :__ *** https://cloudsecurityalliance.org/download/top-threats-cloud-computing-plus-industry-insights/ *** https://downloads.cloudsecurityalliance.org/assets/research/top-threats/treacherous-12-top-threats.pdf *** Pour le modèle ''STRIDE'' : https://social.technet.microsoft.com/wiki/contents/articles/51078.comprendre-le-modele-stride-fr-fr.aspx
[[Dernières publications|Publications]] : [[Cryptographie|Publication - Cryptographie]] • [[RGPD|Publication - RGPD]] • [[Incidents|Publication - Incidents]] • [[Situation 2018|Publication - Situation]] • [[ERP|Publication - ERP]] • 
[img(100px,auto)[i/ForumSecuriteCloud-2.jpg]]__[[Venez nous retrouver au Forum Securité@Cloud dans le cadre du Salon Cloud Computing World Expo le 22 mars après-midi|Actualités Mars 2018]]__[img(100px,auto)[i/CloudComputingWorld.jpg]]
Les différents groupes de travail de la [[Cloud Security Alliance]] sont :

|[[Big Data|https://cloudsecurityalliance.org/group/big-data/]] |[[Blockchain/Distributed Ledger|https://cloudsecurityalliance.org/group/blockchain/]] |[[CloudAudit|https://cloudsecurityaliance.org/group/cloudaudit/]] |
|[[CloudCISC|https://cloudsecurityalliance.org/group/cloudcisc/]] |[[Cloud Component Specifications|https://cloudsecurityalliance.org/group/cloud-component-specifications/]] |![[Cloud Controls Matrix|Groupe de Travail - Cloud Controls Matrix]] +++[»] [img(350px,auto)[iCSA/WG-CCM.jpg]]=== |
|[[Cloud Data Center Security|https://cloudsecurityalliance.org/group/cloud-data-center-security/]] |[[Cloud Data Governance|https://cloudsecurityalliance.org/group/cloud-data-governance/]] |[[Cloud Security Services Management|https://cloudsecurityalliance.org/group/cloud-security-services-management/]] |
|[[CloudTrust|https://cloudsecurityalliance.org/group/cloudtrust/]] |[[CloudTrust Protocol|https://cloudsecurityalliance.org/group/cloudtrust-protocol/]] |[[Cloud Vulnerabilities|https://cloudsecurityalliance.org/group/cloud-vulnerabilities/]] |
|[[Consensus Assessments (CAI)|https://cloudsecurityalliance.org/group/consensus-assessments/]] |[[Containers and Microservices|https://cloudsecurityalliance.org/group/containerization/]] |[[Enterprise Architecture|https://cloudsecurityalliance.org/group/enterprise-architecture/]] |
|[[ERP Security|https://cloudsecurityalliance.org/group/enterprise-resource-planning/]] |[[Financial Services Stakeholder|https://cloudsecurityalliance.org/group/financial-services-stakeholder-platform/]] |[[Health Information Management|https://cloudsecurityalliance.org/group/health-information-management/]] |
|[[Incident Management and Forensics|https://cloudsecurityalliance.org/group/incident-management-and-forensics/]] |[[Innovation|https://cloudsecurityalliance.org/group/innovation/]] |[[International Standardization Council|https://cloudsecurityalliance.org/isc/]] +++[»] [img(350px,auto)[iCSA/WG-ISC.jpg]]=== |
|[[Internet of Things (IoT)|https://cloudsecurityalliance.org/group/internet-of-things/]] |[[Legal|https://cloudsecurityalliance.org/group/legal/]] |[[Mobile|https://cloudsecurityalliance.org/group/mobile/]] |
|[[Open API|https://cloudsecurityalliance.org/group/open-api/]] |[[Open Certification Framework (OCF)|https://cloudsecurityalliance.org/group/open-certification/]] |[[Privacy Level Agreement (PLA)|https://cloudsecurityalliance.org/group/privacy-level-agreement/]] |
|[[Quantum-safe Security (QSS)|https://cloudsecurityalliance.org/group/quantum-safe-security/]] |[[SaaS Governance|https://cloudsecurityalliance.org/group/saas-governance/]] |[[Security as a Service (SecaaS)|https://cloudsecurityalliance.org/group/security-as-a-service/]] |
|![[Security Guidance|Groupe de Travail - Security Guidance]]  +++[»] [img(350px,auto)[iCSA/moving-domains.jpg]]=== |[[Software Defined Perimeter (SDP)|https://cloudsecurityalliance.org/group/software-defined-perimeter/]] |[[Telecom|https://cloudsecurityalliance.org/group/telecom/]] |
|![[Top Threats|Groupe de Travail - Top Threats]] +++[»] [img[iCSA/TopThreats_logo.png]]=== |
|[[Virtualization|https://cloudsecurityalliance.org/group/virtualization/]] ||
/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Documentation|http://www.TiddlyTools.com/#HTMLFormattingPluginInfo|
|Version|2.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|embed wiki syntax formatting inside of HTML content|
The ~HTMLFormatting plugin allows you to ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.
!!!!!Documentation
>see [[HTMLFormattingPluginInfo]]
!!!!!Configuration
<<<
Use {{{<hide linebreaks>}}} within HTML content to wiki-style rendering of line breaks.  To //always// omit all line breaks from the rendered output, you can set this option:
><<option chkHTMLHideLinebreaks>> ignore all line breaks
which can also be 'hard coded' into your document by adding the following to a tiddler, tagged with <<tag systemConfig>>
>{{{config.options.chkHTMLHideLinebreaks=true;}}}
<<<
!!!!!Revisions
<<<
2010.05.07 2.4.1 added chkHTMLHideLinebreaks option
| see [[HTMLFormattingPluginInfo]] for additional revision details |
2005.06.26 1.0.0 Initial Release (as code adaptation - pre-dates TiddlyWiki plugin architecture!!)
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormattingPlugin= {major: 2, minor: 4, revision: 1, date: new Date(2010,5,7)};

// find the formatter for HTML and replace the handler
initHTMLFormatter();
function initHTMLFormatter()
{
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		if (!this.lookaheadRegExp)  // fixup for TW2.0.x
			this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var html=lookaheadMatch[1];
			// if <nowiki> is present, just let browser handle it!
			if (html.indexOf('<nowiki>')!=-1)
				createTiddlyElement(w.output,"span").innerHTML=html;
			else {
				// if <hide linebreaks> is present, or chkHTMLHideLinebreaks is set
				// suppress wiki-style literal handling of newlines
				if (config.options.chkHTMLHideLinebreaks||(html.indexOf('<hide linebreaks>')!=-1))
					html=html.replace(/\n/g,' ');
				// remove all \r's added by IE textarea and mask newlines and macro brackets
				html=html.replace(/\r/g,'').replace(/\n/g,'\\n').replace(/<</g,'%%(').replace(/>>/g,')%%');
				// create span, let browser parse HTML
				var e=createTiddlyElement(w.output,"span"); e.innerHTML=html;
				// then re-render text nodes as wiki-formatted content
				wikifyTextNodes(e,w);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex; // continue parsing
		}
	}
}

// wikify #text nodes that remain after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode,w)
{
	function unmask(s) { return s.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n'); }
	switch (theNode.nodeName.toLowerCase()) {
		case 'style': case 'option': case 'select':
			theNode.innerHTML=unmask(theNode.innerHTML);
			break;
		case 'textarea':
			theNode.value=unmask(theNode.value);
			break;
		case '#text':
			var txt=unmask(theNode.nodeValue);
			var newNode=createTiddlyElement(null,"span");
			theNode.parentNode.replaceChild(newNode,theNode);
			wikify(txt,newNode,highlightHack,w.tiddler);
			break;
		default:
			for (var i=0;i<theNode.childNodes.length;i++)
				wikifyTextNodes(theNode.childNodes.item(i),w); // recursion
			break;
	}
}
//}}}
<html><i class="fa fa-graduation-cap fa-3x" aria-hidden="true"></i></html>
Depuis 2012, partenaire du 
''Mastère Spécialisé ®
[[Expertise Cloud Computing|https://formation-continue.isep.fr/cloud-computing/]]''
[img(100px,auto)[i/ISEP-FC.jpg][https://www.isep.fr/masteres-specialises/]]
----
<<tiddler HeaderNews>>
----
__Document de référence__
[[Cloud Controls Matrix|Groupe de Travail - Cloud Controls Matrix]]
[img(100px,auto)[CCM|iCSA/CCM_logo.png][Groupe de Travail - Cloud Controls Matrix]]
----
Suivez nous sur Twitter
[img[Lien vers le compte Twitter du Chapitre Français|i/Twitter_icon.png][http://twitter.com/cloudsaFR]]
----
Suivez la [[Cloud Security Alliance]] sur Twitter
[img[Lien vers le compte Twitter du Chapitre Français|i/Twitter_icon.png][http://twitter.com/cloudsa]]
<<QOTD Headlines 10000 noclick norandom>>
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 2, date: new Date(2010,7,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.imageSize={
	tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
	dragtip: 'DRAG=stretch/shrink, '
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?this.imageSize.dragtip:'')+this.imageSize.tip;
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2010.12.15 1.9.6 allow (but ignore) type="..." syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 6, date: new Date(2010,12,15)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: type=\\\"[^\\\"]*\\\")?(?: src=\\\"([^\\\"]*)\\\")?(?: label=\\\"([^\\\"]*)\\\")?(?: title=\\\"([^\\\"]*)\\\")?(?: key=\\\"([^\\\"]*)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
@@display:none;<<tiddler .ToggleRightSidebar>>@@{{floatL{[[Quoi de neuf|Dernières mises à jour]]
[[Présentation|Présentation du Chapitre Français de la Cloud Security Alliance]]
[[Actualités]]
[[Blog]]
[[Groupes de travail]]
[[Documents]]
----
Rejoignez nous 
[img[Lien vers le compte Twitter du Chapitre Français|i/Twitter_icon.png][http://twitter.com/cloudsaFR]] &#x2022; [img[i/LinkedIn.png][http://www.linkedin.com/groupRegistration?gid=3758242]]
----
[[Une question ?|Contact]]
}}}{{floatL{__[[Actualités]]__ <<tiddler HeadlinesRoll>>}}}
<!--{{{-->
<link rel='stylesheet' href='font-awesome/css/font-awesome.min.css' />
<!-- link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' -->
<!--}}}-->
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
/***
|''Name''|NightModePlugin|
|''Description''|This plugin introduces the {{{switchNightMode}}} macro that allows to switch "day mode" and "night mode" styles|
|''Version''|0.9.8|
|''~CoreVersion''||
|''Author''|Yakov Litvin|
!!!Syntax
{{{
<<switchNightMode label:"try this">>
}}}
!!!Demo
<<switchNightMode label:"B/W">>
!!!Code
***/
//{{{
var applySectionCSS = function(section) {
	var text = store.getRecursiveTiddlerText("NightModePlugin##"+section,"",1);
	text = text.substring(3, text.length-3);
	return setStylesheet(text,section);
};

config.macros.switchNightMode = {
	nightCPText: store.getTiddlerText("NightModePlugin##NightModeColorPalette"),
	goNight: function() { // doesn't check or change the cookie-parameter

		var paletteName = "ColorPalette",
		    paletteTid  = store.fetchTiddler(paletteName);
		this.dayPalette = {
			tid: paletteTid ? paletteTid : null,
			shadow: paletteTid ? null : config.shadowTiddlers[paletteName]
		};

		var nigthTid = new Tiddler(paletteName);
		nigthTid.assign(null,this.nightCPText)
		store.saveTiddler(nigthTid); // attach the tiddler, recalc slices, invoke notifiers
		applySectionCSS("TextBoxColors");
		applySectionCSS("~FewerColors");
	},
	goDay: function() { // doesn't check or change the cookie-parameter

		var paletteName = "ColorPalette";
		if(this.dayPalette.shadow)
			config.shadowTiddlers[paletteName] = this.dayPalette.shadow;

		store.removeTiddler(paletteName); // to recalc slices of ColorPalette

		if(this.dayPalette.tid)
			store.saveTiddler(this.dayPalette.tid);
		removeStyleSheet("TextBoxColors");
		removeStyleSheet("~FewerColors");
	},
	switchMode: function() {

		if(config.options.chkNightMode)
			config.macros.switchNightMode.goDay();
		else
			config.macros.switchNightMode.goNight();

		config.options.chkNightMode = !config.options.chkNightMode;

// "baking" doesn't work yet..
		if(saveOption)
			saveOption("chkNightMode");
		else
			saveOptionCookie("chkNightMode");

		refreshColorPalette();
	},
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {

		var pParams = paramString.parseParams("anon",null,true,false,true),
		    label = getParam(pParams,"label","switch");

		createTiddlyButton(place,label,""/*tooltip*/,this.switchMode);
	}
};

var orig_saveChanges = saveChanges;
saveChanges = function(onlyIfDirty,tiddlers)
{
	// make sure that the night palette is not saved
	var toggle = config.options.chkNightMode;
	if(toggle) {
		if(config.macros.switchNightMode.dayPalette.tid)
			store.addTiddler(config.macros.switchNightMode.dayPalette.tid);
		else
			store.deleteTiddler("ColorPalette");
	}

	orig_saveChanges.apply(this,arguments);

	if(toggle) {
		var nigthTid = new Tiddler("ColorPalette");
		nigthTid.assign(null,config.macros.switchNightMode.nightCPText)
		store.addTiddler(nigthTid);
	}
}

// apply night mode if it was set previously
// (.init method of the macro shouldn't be used as it is invoked too late and would require refreshing)
if(config.options.chkNightMode)
	config.macros.switchNightMode.goNight();
//}}}
/***
!!!TextBoxColors
{{{
input, select,
textarea { color:[[ColorPalette::Foreground]]; background-color:[[ColorPalette::Background]]; }
}}}
!!!~FewerColors
{{{
.title, h1, h2, h3, h4, h5, h6
	{ color:[[ColorPalette::PrimaryDark]]; 
}}}
!!!NightModeColorPalette
Background: #000
Foreground: #fff
~PrimaryPale: #730
~PrimaryLight: #e70
~PrimaryMid: #fb4
~PrimaryDark: #feb
~SecondaryPale: #003
~SecondaryLight: #017
~SecondaryMid: #24b
~SecondaryDark: #7be
~TertiaryPale: #111
~TertiaryLight: #333
~TertiaryMid: #666
~TertiaryDark: #999
Error: #f44
***/
|''Name''|PSTheme|
|''Description''|personal theme|

!Author Mode
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|
|ColorPalette|ColorPalette|

!Read-Only Mode
|PageTemplateReadOnly|##PageTemplate|
|ViewTemplateReadOnly|##ViewTemplate|
|EditTemplateReadOnly|##EditTemplate|
|StyleSheetReadOnly|##StyleSheet|
|ColorPalette|ColorPalette|

!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::Foreground]] [[ColorPalette::PrimaryMid]]'>
<div class="titles"><span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span></div>
<span class='topMenu' refresh='content' tiddler='TopMenu'></span>
</div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<div class='editor' macro='edit text'></div>
<!--}}}-->

!StyleSheet
[[StyleSheet]]
/*{{{*/
.HideSideBarButton {float:right;  font-size: 1em;} 

.viewer .center {
 text-align: center;
 margin-left: auto;
 margin-right: auto
}

body {
 font-family: Nobile,arial,sans-serif;
 line-height: 1.2
}

.header {
 padding: 1.25em 0 0 0;
}

.header a {
 color: [[ColorPalette::Background]];
 padding: 0.25em 0.25em 0.25em 0.25em;
 margin-bottom: -2px
}

.header .externalLink {
 text-decoration: none;
}

.header a:hover {
 color:[[ColorPalette::Foreground]];
 background: [[ColorPalette::Background]];
}

.siteTitle {
 color: [[ColorPalette::SecondaryLight]];
 font-size: 2em;
 font-weight: bold;
 padding: 0 0 0 0.5em;
}

.siteSubtitle {
 color: [[ColorPalette::SecondaryLight]];
 font-weight: bold;
}

.titles {
 margin: 0.25em 0 0.5em 0
}

.topMenu {
 padding: 0 0 0 1em;
 font-size: 0.9em;
}

h1,h2,h3,h4,h5 {
 color: [[ColorPalette::Foreground]];
 border: none;
}

h1 {font-size:1.6em;}
h2 {font-size:1.35em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.8em;}

.viewer hr {
 border: 0;
 border-top: 1px dotted [[ColorPalette::SecondaryDark]];
 color: [[ColorPalette::SecondaryDark]];
}

.title {
 font-size:1.8em;
 border-bottom: 1px dotted [[ColorPalette::SecondaryDark]];
 padding-bottom: 0.1em;
 margin-bottom: 0.1em;
}

.subtitle {
 padding-top: 0.25em;
 margin-bottom: 0.25em;
 font-size: x-small
}

.editor input, .editor textarea {
 margin-bottom: 1px;
}

input {font-size: 100%;}

.txtOptionInput {width: 15em;}

#displayArea {margin: 1em 15.5em 0em 1em;}

@media print {
body {background:#ffffff;}
#mainMenu, #sidebar, #messageArea, .tagging, .tagged, .subtitle, #pageFooter, .button, .header {display: none ! important;}
#displayArea {margin: 1em 0em 0em 0em !important;}
.tiddler {padding:0;}
noscript{ display:none;}
.title {color:#000;}
}
/*}}}*/
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryDark]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<img src="i/FR.jpg" align="right">
<img src="i/cloud-security-alliance-2.png" align="right">
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>&nbsp;
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div style="text-align:center"><span class='HeaderNews' refresh='content' tiddler='HeaderNews'></span></div>
<div id='tiddlerDisplay'></div>
<div style="text-align:center"><span class='FooterNews' refresh='content' tiddler='FooterDisclaimer'></span></div>
</div>
<!--}}}-->
/*{{{*/
#pageHeader { color: #cff; padding: 0.25em; background-image: url('i/flag_fr.png'); background-repeat: no-repeat; background-position: right; }
#pageFooter { color: #00f }
#slideHeader { color: #00f; padding: 1.5em; background-image: url('i/flag_fr.png'); background-repeat: no-repeat; background-position: right; }
#slideFooter { color: #00f}
##_0c4_ .header, .mainMenu, #sidebar, #backstageShow{ display:block !important }
#displayArea{ font-size: 100%; margin: 1em 15.5em 0em 1em !important; position: relative; }
h1,h2,h3 {margin-top:0.3em}
@media print {
#mainMenu, #sidebar, #messageArea, .tagging, .tagged, .subtitle, #pageFooter, #slideFooter, #pageHeader, #slideHeader, .button, .header {display:block ! important;}
.tiddler{ page-break-after: always; border: 2px solid blue; margin: 1em 0 1em 0; padding: 0.5em }
#displayArea {margin: 1em 0em 0em 0em !important;}
}
/*}}}*/
[>img(200px,auto)[i/cloud-security-alliance.png]]Le [[Chapitre Français|Présentation du Chapitre Français de la Cloud Security Alliance]] de la [[Cloud Security Alliance]] est une association formée pour faire la promotion des meilleures pratiques de sécurité au sein des infrastructures Cloud Computing.

Il se charge notamment :
* d'adapter certains documents de la [[Cloud Security Alliance]] aux spécificités françaises (notamment réglementaires)
* de favoriser les meilleures pratiques de sécurité auprès des fournisseurs de Cloud Public français et au sein des Entreprises qui batissent des Clouds Privés
* de publier de nouvelles recommandations de sécurité relatives au Cloud Computing
* de traduire certains documents de la [[Cloud Security Alliance]] en français
* de mener des actions pour former et évangéliser autour de la notion de la sécurité du Cloud Computing
* d'établir des relations avec des journalistes et des groupes de travail similaires autour du Cloud Computing et de la Sécurité
* de participer à tout type d'événements ou de conférences liées à la sécurité du Cloud Computing

<html><i class="fa fa-graduation-cap fa-3x" aria-hidden="true"></i></html> [>img(200px,auto)[i/ISEP-FC.jpg]]
Depuis 2012, le [[Chapitre français|CSA-FR]] de la [[Cloud Security Alliance]] a établi un partenariat en matière de formation avec l'[[ISEP Formation Continue|https://www.isep.fr/masteres-specialises/]] et assure notamment l'enseignement de la partie "Sécurité du Cloud" dans le cadre du ''Mastère Spécialisé ® [[Expertise Cloud Computing|https://formation-continue.isep.fr/cloud-computing/]]''.

Pour tout renseignement, contactez nous à l'adresse suivante : ''&#8238;rf.ecnaillaytirucesduolc@ofni&#8236;''
Le site de la [[Cloud Security Alliance]] est http://www.CloudSecurityAlliance.org
!Les dernières publications notables sont les suivantes :
<<tabs Publications
"Cryptographie" "Cryptographie" "Publication - Cryptographie" 
"RGPD" "RGPD" "Publication - RGPD" 
"Incidents" "Incidents" "Publication - Incidents" 
"Situation 2018" "Situation 2018" "Publication - Situation" 
"Blockchain" "Blockchain" "Publication - Blockchain" 
"ERP" "ERP" "Publication - ERP" 
>>
!"Using Blockchain Technology to Secure the Internet of Things"
Publication du 13 février 2018
Lien : https://cloudsecurityalliance.org/download/using-blockchain-technology-to-secure-the-internet-of-things/ 

[img(150px,auto)[iCSA/Using_BlockChain_Technology_to_Secure_the_Internet_of_Things.png][https://cloudsecurityalliance.org/download/a-day-without-safe-cryptography/]] 

----
!"Blockchain/Distributed Ledger Working Group Glossary"
Publication du 15 décembre 2017
Lien : https://cloudsecurityalliance.org/download/blockchaindistributed-ledger-working-group-glossary/

[img(150px,auto)[iCSA/blockchain-distributed-ledger-glossary.png][https://cloudsecurityalliance.org/download/blockchaindistributed-ledger-working-group-glossary/]] 
!"A Day Without Safe Cryptography"
Publication du 19 avril 2018 
Lien : https://cloudsecurityalliance.org/download/a-day-without-safe-cryptography/

[img(150px,auto)[iCSA/SafeCrypto-cover-234x300.png][https://cloudsecurityalliance.org/download/a-day-without-safe-cryptography/]] 
!"The State of Enterprise Resource Planning Security in the Cloud"
Publication du 7 février 2018 
Lien : https://cloudsecurityalliance.org/download/enterprise-resource-planning-security-in-the-cloud/

[img(150px,auto)[iCSA/ERP_Security_CSA.jpg][https://cloudsecurityalliance.org/download/enterprise-resource-planning-security-in-the-cloud/]] 
!"Best Practices for Cyber Incident Exchange"
Publication du 16 avril 2018
Lien : https://cloudsecurityalliance.org/download/best-practices-for-cyber-incident-exchange/

[img(150px,auto)[iCSA/Cloud-CISC-1.png][ https://cloudsecurityalliance.org/download/best-practices-for-cyber-incident-exchange/]] 
!"GDPR Preparation and Awareness Survey Report"
Publication du 17 avril 2018
Lien : https://cloudsecurityalliance.org/download/gdpr-preparation-and-awareness-survey-report/ 

[img(150px,auto)[iCSA/GDPR_Prep-232x300.png][https://cloudsecurityalliance.org/download/gdpr-preparation-and-awareness-survey-report/]] 
!"State of Cloud Security Report" 2018
Publication du 16 avril 2018
Lien : https://cloudsecurityalliance.org/download/state-of-cloud-report/

[img(150px,auto)[iCSA/State_of_Cloud-2018.png][https://cloudsecurityalliance.org/download/state-of-cloud-report/]] 
/***
|Name|QuoteOfTheDayPlugin|
|Source|http://www.TiddlyTools.com/#QuoteOfTheDayPlugin|
|Documentation|http://www.TiddlyTools.com/#QuoteOfTheDayPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Display a randomly selected "quote of the day" from a list defined in a separate tiddler|

!!!!!Documentation
>see [[QuoteOfTheDayPluginInfo]]
!!!!!Revisions
<<<
2008.03.21 [1.4.1] in showNextItem(), corrected handling for random selection so that //initial// index value will randomized correctly instead of always showing first item, even when randomizing. Thanks to Riccardo Gherardi for finding this.
| Please see [[QuoteOfTheDayPluginInfo]] for previous revision details |
2005.10.21 [1.0.0] Initial Release. Based on a suggestion by M.Russula
<<<
!!!!!Code
***/
//{{{
version.extensions.QuoteOfTheDayPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2008,3,21)};
config.macros.QOTD = {
 clickTooltip: "click to view another item",
 timerTooltip: "auto-timer stopped... 'mouseout' to restart timer",
 timerClickTooltip: "auto-timer stopped... click to view another item, or 'mouseout' to restart timer",
 handler:
 function(place,macroName,params) {
 var tid=params.shift(); // source tiddler containing HR-separated quotes
 var p=params.shift();
 var click=true; // allow click for next item
 var inline=false; // wrap in slider for animation effect
 var random=true; // pick an item at random (default for "quote of the day" usage)
 var folder=false; // use local filesystem folder list
 var cookie=""; // default to no cookie
 var next=0; // default to first item (or random item)
 while (p) {
 if (p.toLowerCase()=="noclick") var click=false;
 if (p.toLowerCase()=="inline") var inline=true;
 if (p.toLowerCase()=="norandom") var random=false;
 if (p.toLowerCase().substr(0,7)=="cookie:") var cookie=p.substr(8);
 if (!isNaN(p)) var delay=p;
 p=params.shift();
 }
 if ((click||delay) && !inline) {
 var panel = createTiddlyElement(null,"div",null,"sliderPanel");
 panel.style.display="none";
 place.appendChild(panel);
 var here=createTiddlyElement(panel,click?"a":"span",null,"QOTD");
 }
 else
 var here=createTiddlyElement(place,click?"a":"span",null,"QOTD");
 here.id=(new Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
 // get items from tiddler or file list
 var list=store.getTiddlerText(tid,"");
 if (!list||!list.length) { // not a tiddler... maybe an image directory?
 var list=this.getImageFileList(tid);
 if (!list.length) { // maybe relative path... fixup and try again
 var h=document.location.href;
 var p=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
 var list=this.getImageFileList(p+tid);
 }
 }
 if (!list||!list.length) return false; // no contents... nothing to display!
 here.setAttribute("list",list);
 if (delay) here.setAttribute("delay",delay);
 here.setAttribute("random",random);
 here.setAttribute("cookie",cookie);
 if (click) {
 here.title=this.clickTooltip
 if (!inline) here.style.display="block";
 here.setAttribute("href","javascript:;");
 here.onclick=function(event)
 { config.macros.QOTD.showNextItem(this); }
 }
 if (config.options["txtQOTD_"+cookie]!=undefined) next=parseInt(config.options["txtQOTD_"+cookie]);
 here.setAttribute("nextItem",next);
 config.macros.QOTD.showNextItem(here);
 if (delay) {
 here.title=click?this.timerClickTooltip:this.timerTooltip
 here.onmouseover=function(event)
 { clearTimeout(this.ticker); };
 here.onmouseout=function(event)
 { this.ticker=setTimeout("config.macros.QOTD.tick('"+this.id+"')",this.getAttribute("delay")); };
 here.ticker=setTimeout("config.macros.QOTD.tick('"+here.id+"')",delay);
 }
 },
 tick: function(id) {
 var here=document.getElementById(id); if (!here) return;
 config.macros.QOTD.showNextItem(here);
 here.ticker=setTimeout("config.macros.QOTD.tick('"+id+"')",here.getAttribute("delay"));
 },
 showNextItem:
 function (here) {
 // hide containing slider panel (if any)
 var p=here.parentNode;
 if (p.className=="sliderPanel") p.style.display = "none"
 // get a new quote
 var index=here.getAttribute("nextItem"); 
 var items=here.getAttribute("list").split("\n----\n");
 if (index<0||index>=items.length) index=0;
 if (here.getAttribute("random")=="true") index=Math.floor(Math.random()*items.length);
 var txt=items[index];
 // re-render quote display element, and advance index counter
 removeChildren(here); wikify(txt,here);
 index++; here.setAttribute("nextItem",index);
 var cookie=here.getAttribute("cookie");
 if (cookie.length) {
 config.options["txtQOTD_"+cookie]=index.toString();
 saveOptionCookie("txtQOTD_"+cookie);
 }
 // redisplay slider panel (if any)
 if (p.className=="sliderPanel") {
 if(anim && config.options.chkAnimate)
 anim.startAnimating(new Slider(p,true,false,"none"));
 else p.style.display="block";
 }
 },
 getImageFileList: function(cwd) { // returns HR-separated list of image files
 function isImage(fn) {
 var ext=fn.substr(fn.length-3,3).toLowerCase();
 return ext=="jpg"||ext=="gif"||ext=="png";
 }
 var files=[];
 if (config.browser.isIE) {
 cwd=cwd.replace(/\//g,"\\");
 // IE uses ActiveX to read filesystem info
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 if(!fso.FolderExists(cwd)) return [];
 var dir=fso.GetFolder(cwd);
 for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
 if (isImage(f.item().path)) files.push("[img[%0]]".format(["file:///"+f.item().path.replace(/\\/g,"/")]));
 } else {
 // FireFox (mozilla) uses "components" to read filesystem info
 // get security access
 if(!window.Components) return;
 try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
 catch(e) { alert(e.description?e.description:e.toString()); return []; }
 // open/validate directory
 var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
 try { file.initWithPath(cwd); } catch(e) { return []; }
 if (!file.exists() || !file.isDirectory()) { return []; }
 var folder=file.directoryEntries;
 while (folder.hasMoreElements()) {
 var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
 if (f instanceof Components.interfaces.nsILocalFile)
 if (isImage(f.path)) files.push("[img[%0]]".format(["file:///"+f.path.replace(/\\/g,"/")]));
 }
 }
 return files.join("\n----\n");
 }
}
//}}}
/%
!info
|Name|ReplaceDoubleClick|
|Source|http://www.TiddlyTools.com/#ReplaceDoubleClick|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|disable doubleclick-to-edit-tiddler or replace doubleclick with shift/ctrl/alt+singleclick|
Usage:
<<<
{{{
<<tiddler ReplaceDoubleClick>> or
<<tiddler ReplaceDoubleClick with: key trigger>>
}}}
*''key'' (optional)
**''none'' (default=disables double-click)
**''ctrl, shift,'' or ''alt'' invokes the action only when the indicated key is used in combination with the mouse.
*''trigger'' (optional)<br>is either 'click' or 'doubleclick' (default).
<<<
Example:
<<<
{{{<<tiddler ReplaceDoubleClick with: shift click>>}}}
<<tiddler ReplaceDoubleClick with: shift click>>//(use shift+click to edit this tiddler)//
<<<
!end
!show
<<tiddler {{
 var here=story.findContainingTiddler(place);
 if (here && here.ondblclick) {
 here.setAttribute('editKey','none');
 var key='$1'; if (key=='$'+'1') key='none'
 if (['shift','ctrl','alt'].contains(key))
 here.setAttribute('editKey',key+'Key');
 var trigger=('$2'=='click')?'onclick':'ondblclick';
 here.save_dblclick=here.ondblclick;
 here.ondblclick=null;
 if (here.getAttribute('editKey')!='none')
 here[trigger]=function(e) {
 var ev=e?e:window.event;
 if (ev[this.getAttribute('editKey')])
 this.save_dblclick.apply(this,arguments);
 }
 }'';}}>>
!end
%/<<tiddler {{var src='ReplaceDoubleClick';src+(tiddler&&tiddler.title==src?'##info':'##show')}} with: [[$1]] [[$2]]>>
/%
!info
|Name|ReplaceTiddlerTitle|
|Source|http://www.TiddlyTools.com/#ReplaceTiddlerTitle|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|replace tiddler's title text with other content - may include wiki syntax|
Usage:
<<<
{{{
<<tiddler ReplaceTiddlerTitle with: [[new title text]]>>
}}}
*text can include wiki-syntax formatting (even links and macros!)
*all double-quotes must be preceded by backslash (e.g., {{{[[He said, \"like this\"]]}}})
*if the text contains any macros that use //evaluated parameters//, the closing {{{}} }}}sequence in those parameters must be backslash-quoted (e.g., {{{[[<<someMacro {{...eval param...}\}>>]]}}})
<<<
!end
!show
<<tiddler {{
 var here=story.findContainingTiddler(place); if (here) {
 var nodes=here.getElementsByTagName("*");
 for (var i=0; i<nodes.length; i++) if (hasClass(nodes[i],"title"))
 { removeChildren(nodes[i]); wikify("$1",nodes[i]); break; }
 }
'';}}>>
!end
%/<<tiddler {{'ReplaceTiddlerTitle##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]]>>
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.7|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 7, date: new Date(2010,11,30)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
 config.options.chkSinglePageMode=eval(v);
 if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
 config.lastURL = window.location.hash;
 if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
 }
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
 config.options.chkSinglePageMode=false;
if (config.options.chkSinglePagePermalink==undefined)
 config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
 config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
 config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
 config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
 config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
 config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
 if (!config.options.chkSinglePageMode)
 { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
 if (config.lastURL == window.location.hash) return; // no change in hash
 var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
 if (tids.length==1) // permalink (single tiddler in URL)
 story.displayTiddler(null,tids[0]);
 else { // restore permaview or default view
 config.lastURL = window.location.hash;
 if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
 story.closeAllTiddlers();
 story.displayTiddlers(null,tids);
 }
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
 Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
 var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
 var tiddlerElem=story.getTiddler(title); // ==null unless tiddler is already displayed
 var opt=config.options;
 var single=opt.chkSinglePageMode && !startingUp;
 var top=opt.chkTopOfPageMode && !startingUp;
 var bottom=opt.chkBottomOfPageMode && !startingUp;
 if (single) {
 story.forEachTiddler(function(tid,elem) {
 // skip current tiddler and, optionally, tiddlers that are folded.
 if ( tid==title
 || (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
 return;
 // if a tiddler is being edited, ask before closing
 if (elem.getAttribute("dirty")=="true") {
 if (opt.chkSinglePageKeepEditedTiddlers) return;
 // if tiddler to be displayed is already shown, then leave active tiddler editor as is
 // (occurs when switching between view and edit modes)
 if (tiddlerElem) return;
 // otherwise, ask for permission
 var msg="'"+tid+"' is currently being edited.\n\n";
 msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
 if (!confirm(msg)) return; else story.saveTiddler(tid);
 }
 story.closeTiddler(tid);
 });
 }
 else if (top)
 arguments[0]=null;
 else if (bottom)
 arguments[0]="bottom";
 if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
 window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
 config.lastURL = window.location.hash;
 document.title = wikifyPlain("SiteTitle") + " - " + title;
 if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
 }
 if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
 var isTopTiddler=(tiddlerElem.previousSibling==null);
 if (!isTopTiddler && (single || top))
 tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
 else if (bottom)
 tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
 else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
 } else
 this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
 var tiddlerElem=story.getTiddler(title);
 if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
 // scroll to top of page or top of tiddler
 var isTopTiddler=(tiddlerElem.previousSibling==null);
 var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
 // if animating, defer scroll until after animation completes
 var delay=opt.chkAnimate?config.animDuration+10:0;
 setTimeout("window.scrollTo(0,"+yPos+")",delay); 
 }
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
 Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
 // suspend single/top/bottom modes when showing multiple tiddlers
 var opt=config.options;
 var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
 var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
 var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
 this.SPM_coreDisplayTiddlers.apply(this,arguments);
 opt.chkBottomOfPageMode=saveBPM;
 opt.chkTopOfPageMode=saveTPM;
 opt.chkSinglePageMode=saveSPM;
}
//}}}
~~<<tiddler .ToggleLeftSidebar>>~~
Cloud Security Alliance
/***
|''Name:''|SlideShowPlugin|
|''Description:''|Creates a slide show from any number of tiddlers|
|''Documentation:''|[[SlideShowPlugin Documentation|SlideShowPluginDoc]]|
|''Author:''|Paulo Soares / fork: [[Tobias Beer|http://tobibeer.tiddlyspace.com]]|
|''Contributors:''|John P. Rouillard|
|''Version:''|2.3.0|
|''Date:''|2013-10-05|
|''Source''|https://raw.github.com/tobibeer/TiddlyWikiPlugins/master/forked/TiddlersBarPlugin.js|
|''Master:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.5.0|
This fork introduces the {{{controls}}} parameter that allows to show the controls by default.
***/
//{{{
(function($) {

//# ensure that the plugin is only installed once
if(!version.extensions.SlideShowPlugin) {
  version.extensions.SlideShowPlugin = {
    installed: true
  };

var me = config.macros.slideShow = {

maxTOCLength: 30,
separator: '-s-',

text: {
  label: "slide show",
  tooltip: "Start the slide show",
  quit: {
    label: "x",
    tooltip: "quit"
  },
  firstSlide: {
    label: "<<",
    tooltip: "first slide"
  },
  previous: {
    label: "<",
    tooltip: "previous slide"
  },
  next: {
    label: ">",
    tooltip: "next slide"
  },
  lastSlide: {
    label: ">>",
    tooltip: "last slide"
  },
  goto: {
    label: "Go to slide:"
  },
  resetClock: {
    tooltip: "reset clock"
  },
  overlay: "overlay"
},

handler: function(place, macroName, params, wikifier, paramString){
  var px = paramString.parseParams(null,null,false);
  createTiddlyButton(
    place,
    getParam(px, "label", me.text.label),
    getParam(px, "tooltip", me.text.tooltip),
    function(){
      me.onClick(place, paramString);
      return false;
    }
  );
  return false;
},

onClick: function(place, paramString) {
  var slide,
    count = 0,
    t0 = new Date(0),
    title = story.findContainingTiddler(place),
    px = paramString.parseParams(null,null,false),
    params = paramString.readMacroParams();

  title = title ? title.getAttribute("tiddler") : null;
  title = getParam(px,"tiddler", title);

  me.blocked = 0;
  me.slides = [];
  me.slideTOC = [];
  me.openTiddlers = [];

  me.single = params.contains('single');
  me.clicks = !params.contains('noClicks');
  me.keyboard = !params.contains('noKeyboard');
  me.showAll = params.contains('showAll');
  me.cycle = params.contains('cycle');
  me.overlays = !params.contains('noOverlays');
  me.controls = params.contains('controls');

  me.theme = getParam(px,"theme");
  me.tag = getParam(px,"tag");
  me.toc = getParam(px,"toc","headers");
  me.sort = getParam(px,"sort");
  me.clockFormat = getParam(px,"clockFormat",'0hh:0mm:0ss');
  me.auto = getParam(px,"auto",0);
  me.header = getParam(px,"header",title);
  me.footer = getParam(px,"footer","");
  me.clock = getParam(px,"clock");
  me.clockType = parseFloat(me.clock);

  if(me.clock){
    me.clockCorrection = t0.getTimezoneOffset() * 60000;
    t0 = new Date();
    me.clockMultiplier = 1;
    me.clockInterval = 0;
    if(me.clockType < 0) {
      me.clockMultiplier = -1;
      me.clockInterval = -me.clockType*60000;
    } else if(me.clockType == 0){
      me.clockCorrection = 0;
      t0 = new Date(0);
    }
    me.clockStartTime = t0.getTime();
  }

  $("#tiddlerDisplay > *").each(function(){
    me.openTiddlers.push( $(this).attr('tiddler') )
  });

  //slideshow in one tiddler
  if(me.single){
    if(!store.tiddlerExists(title)) return;
    $.each(
      store.getTiddlerText(title).split(me.separator),
      function(){
        count++;
        slide = new Tiddler();
        slide.title ="TempSlide" + count;
        slide.tags[0] = "excludeLists";
        slide.text = $.trim(this);
        slide.fields['doNotSave'] = true;
        store.addTiddler(slide);
        me.buildTOC(count,slide.title);
        me.slides.push(slide.title);
      }
    )

  //slideshow by tag
  } else if(me.tag){
    $.each(
      store.getTaggedTiddlers(me.tag, me.sort),
      function(){
        count++;
        me.buildTOC(count,me.title);
        me.slides.push(me.title);
      }
    )

  //slideshow by links
  } else {
    story.displayTiddler(null,title);
    $.each(
      $('[tiddler=' + title + ']').find('.viewer').find('.tiddlyLinkExisting'),
      function(){
        if(!$(this).parents().hasClass("exclude")){
          slide = $(this).attr('tiddlylink');
          count++;
          me.buildTOC(count,slide);
          me.slides.push(slide);
        }
      }
    )
  }

  me.nSlides = me.slides.length;
  if(me.nSlides==0) return false;
  clearMessage();
  me.toggleSlideStyles();
  if(!me.showAll){
    //Attach the key and mouse listeners
    if(me.keyboard && !$("#tiddlerDisplay").hasClass("noKeyboard")) $(document).keyup(me.keys);
    if(me.clicks){
      $(document).mouseup(me.clicker);
      document.oncontextmenu = function(){return false;}
    }
    if(me.clock) me.slideClock=setInterval(me.setClock, 1000);
    if(me.auto>0){
      me.autoAdvance=setInterval(me.next, me.auto*1000);
    }
    me.showSlide(1);
  } else {
    story.closeAllTiddlers();
    story.displayTiddlers(null,me.slides);
    $(".tiddler").attr("ondblclick",null);
    $(document).keyup(me.endSlideShow);
  }
  return false;
},

buildNavigator: function() {
  //create the navigation bar
  var btns, i, nav, toc,
      slidefooter = $("#controlBar")[0];

  if(!slidefooter) return;
  $(slidefooter).addClass("slideFooterOff noClicks");
  nav = createTiddlyElement(slidefooter,"SPAN","navigator");
  btns = createTiddlyElement(nav,"SPAN","buttonBar");
  //show controls? => do show
  if(me.controls) $(slidefooter).removeClass('slideFooterOff').show();
  //otherwise toggle visibility when footer is hovered
  else $(slidefooter).bind(
    "mouseenter mouseleave",
    function(e){$(this).toggleClass("slideFooterOff");
  });

  //control buttons for the navigation
  ['firstSlide','previous','quit|endSlideShow','next','lastSlide'].map(function(id){
    id = id.split('|');
    var click = id[1] ? id[1] : id[0],
        id= id[0];
    createTiddlyButton(btns, me.text[id].label, me.text[id].tooltip, me[click], "button" );
  });

  if(me.clock){
    if(me.clock == 0){
       createTiddlyElement(nav,"SPAN","slideClock");
    } else {
      createTiddlyButton(
        nav,
        " ",
        me.text.resetClock.tooltip,
        me.resetClock,
        "button",
        "slideClock"
      );
    }
    me.setClock();
  }

  createTiddlyElement(slidefooter,"SPAN","slideCounter")
    .onclick = me.toggleTOC;

  toc = createTiddlyElement(slidefooter,"SPAN","toc");
  for(i=0; i<me.slideTOC.length; i++){
    $(toc).append(me.slideTOC[i][2]);
      $(toc.lastChild)
      .addClass("tocLevel"+me.slideTOC[i][1])
      .css("cursor", "pointer")
      .hover(
        function () {$(this).addClass("highlight");},
        function () {$(this).removeClass("highlight");}
      )
      .attr("slide",me.slideTOC[i][0])
      .click(me.showSlideFromTOC);
  }

  //input box to jump to specific slide
  $(
    createTiddlyElement(
      createTiddlyElement(toc, "DIV", "jumpItem", null, me.text.goto.label),
      "INPUT",
      "jumpInput",
      null,
      null,
      null,
      {type:'text'}
    )
  ).keyup(me.jumpToSlide);
},

//Used to shorten the TOC fields
abbreviate: function(label){
  var t, temp = new Array();
  if(label.length > me.maxTOCLength) {
    temp = label.split(' ');
    label = temp[0];
    for(t=1; t<temp.length; t++){
      if((label.length+temp[t].length)<=me.maxTOCLength){
        label += " " + temp[t];
      } else {
        label += " ...";
        break;
      }
    }
  }
  return label;
},

buildTOC: function(count,title) {
  var frag, level = 1, m, matches, txt;

  switch(me.toc){
  case "titles":
    me.slideTOC.push([
      count,
      level,
      "<div>" + me.abbreviate(title) + "</div>"
    ]);
    break;

  case "headers":
    frag = wikifyStatic(store.getTiddlerText(title));
    txt = frag.replace(/<div class="comment">.*<\/div>/mg,"");
    matches = txt.match(/<h[123456]>.*?<\/h[123456]>/mgi);
    if(matches){
      for (m=0; m<matches.length; m++){
        level = matches[m].charAt(2);
        txt = matches[m].replace(/<\/?h[123456]>/gi,"");
        txt = me.abbreviate(txt);
        me.slideTOC.push([
          count,
          level,
          "<div>" + txt + "</div>"
        ]);
      }
    }
  }
},

showSlideFromTOC: function(e) {
  var slide = parseInt(e.target.getAttribute('slide'));
  $("#toc").hide();
  me.showSlide(slide);
  return false;
},

toggleTOC: function(){
  $("#toc").toggle();
  $("#jumpInput").focus().val('');
  return false;
},

jumpToSlide: function(e){
  if(e.which==13){
    var s = parseInt($("#jumpInput").val());
    if(!isNaN(s)){
      s = Math.min(s, me.nSlides);
      $("#toc").hide();
      me.showSlide( Math.max(s, 1) );
    } else {$("#jumpInput").val('');}
  }
  return false;
},

toggleSlideStyles: function(){
  var contentWrapper = $('#contentWrapper');
  if(contentWrapper.hasClass("slideShowMode")){
    refreshPageTemplate();
    removeStyleSheet("SlideShowStyleSheet");
    if(me.theme) removeStyleSheet(me.theme);
  } else {
    $("#displayArea").prepend(
      '<div id="slideBlanker" style="display:none"></div>'+
      '<div id="slideHeader">' + me.header + '</div>'+
      '<div id="slideFooter">' + me.footer + '</div>'+
      '<div id="controlBar"></div>' );
    setStylesheet(
      store.getRecursiveTiddlerText("SlideShowStyleSheet"),"SlideShowStyleSheet");
    if(me.theme && store.tiddlerExists(me.theme)){
      setStylesheet(store.getRecursiveTiddlerText(me.theme),me.theme);
    }
    me.buildNavigator();
  }
  contentWrapper.toggleClass("slideShowMode");
  return false;
},

showSlide: function(n){
  if(me.cycle) {
    if(n>me.nSlides) {
      n = 1;
    } else if(n<1) {
      n = me.nSlides;
    }
  } else {
    if(n>me.nSlides || n<1) return;
  }
  story.closeAllTiddlers();
  if(me.clock=='-'){me.resetClock();}
  story.displayTiddler(null,String(me.slides[n-1]));
  $(".tiddler").attr("ondblclick",null);
  $("body").removeClass("slide" + me.curSlide);
  me.curSlide = n;
  $("body").addClass("slide"+me.curSlide);
  $("#slideCounter").text(me.curSlide+"/"+me.nSlides);
  if(me.overlays){
    var contents = $(".viewer *");
    me.numOverlays = 1;
    while(1){
      if(contents.hasClass(me.text.overlay + me.numOverlays)){
        me.numOverlays++;
      } else {break;}
    }
    me.numOverlays--;
    me.showOverlay(0);
  }
  return false;
},

showOverlay: function(n){
  var i, set;
  if(!me.overlays || me.numOverlays == 0 || n<0 || n>me.numOverlays){return;}
  for(i=1; i<n; i++){
    set = $(".viewer "+"."+me.text.overlay + i);
    set.removeClass("currentOverlay nextOverlay");
    set.addClass("previousOverlay");
  }
  set = $(".viewer "+"."+me.text.overlay + n);
  set.removeClass("previousOverlay nextOverlay");
  set.addClass("currentOverlay");
  for(i=n; i<me.numOverlays; i++){
    set = $(".viewer "+"."+me.text.overlay + (i+1));
    set.removeClass("previousOverlay currentOverlay");
    set.addClass("nextOverlay");
  }
  me.curOverlay = n;
},

firstSlide: function(){
  me.showSlide(1);
  return false;
},

lastSlide: function(){
  me.showSlide(me.nSlides);
  return false;
},

next: function(){
  if(!me.overlays || me.numOverlays == 0 || me.curOverlay == me.numOverlays) {
    me.showSlide(me.curSlide+1);
  } else {
    me.showOverlay(me.curOverlay+1);
  }
  return false;
},

previous: function(){
  if(!me.overlays || me.numOverlays == 0 || me.curOverlay == 0) {
    me.showSlide(me.curSlide-1);
    me.showOverlay(me.numOverlays);
  } else {
    me.showOverlay(me.curOverlay-1);
  }
  return false;
},

endSlideShow: function(){
  if(me.autoAdvance) {clearInterval(me.autoAdvance);}
  if(me.clock) clearInterval(me.slideClock);
  story.closeAllTiddlers();
  me.toggleSlideStyles();
  story.displayTiddlers(null,me.openTiddlers);
  $(document).unbind();
  document.oncontextmenu = function(){};
  $("body").removeClass("slide" + me.curSlide);
  return false;
},

// 'keys' code adapted from S5 as adapted from http://mozpoint.mozdev.org
keys: function(key) {
  if(key.which == 27){ //ESC
    me.endSlideShow();
  
  }else if (key.which == 66){ //B
    $("#slideBlanker").toggle();
    me.blocked = (me.blocked +1)%2;

  }else if(0 == me.blocked){
    switch(key.which) {
      case 32: // spacebar
        if(me.auto>0){
          if(me.autoAdvance){
            clearInterval(me.autoAdvance);
            me.autoAdvance = null;
          } else {
            me.autoAdvance=setInterval(me.next, me.auto*1000);
          }
        } else {
          me.next();
        }
        break;
      case 33: // page up
         me.showSlide(me.curSlide-1);
        break;
      case 34: // page down
        me.showSlide(me.curSlide+1);
        break;
      case 35: // end
        me.lastSlide();
        break;
      case 36: // home
        me.firstSlide();
        break;
      case 37: // left
        me.previous();
        break;
      case 38: // up
        me.showOverlay(0);
        break;
      case 39: // right
        me.next();
        break;
      case 40: // down
        me.showOverlay(me.numOverlays);
        break;
      }
    }
  return false;
},

clicker: function(e) {
  if(
    me.blocked == 1 ||
    $(e.target).attr('href') ||
    $(e.target).parents().andSelf().hasClass('noClicks')
  ) return true;

  if($("#toc").is(':visible')){
    me.toggleTOC();
  } else {
    if((!e.which && e.button == 1) || e.which == 1) {
      me.next();
    }
    if((!e.which && e.button == 2) || e.which == 3) {
      me.previous();
    }
  }
  return false;
},

setClock: function(){
  var now = new Date(),
    time = now.getTime() - me.clockStartTime;

  time =
    me.clockMultiplier * time +
    me.clockInterval +
    me.clockCorrection;

  now.setTime(time);
  time = now.formatString(me.clockFormat);
  $("#slideClock").text(time);
  return false;
},

resetClock: function(){
  var t,s;
  if(me.clock == 0) return;
  t = new Date(0);
  if(me.clockStartTime > t){
    s = new Date();
    me.clockStartTime = s.getTime();
  }
  return false;
}
}

config.formatters.push( {
  name: "SlideSeparator",
  match: "^" + me.separator + "+$\\n?",
  handler: function(w) {
    createTiddlyElement(w.output,"hr",null,'slideSeparator');
  }
});

config.shadowTiddlers.SlideShowStyleSheet = [
"/*{{{*/",
".header, #mainMenu, #sidebar,",
"#backstageButton, #backstageArea,",
".toolbar, .title, .subtitle,",
".tagging, .tagged, .tagClear, .comment{",
" display:none !important",
"}\n",
"#slideBlanker{",
" position: absolute;",
" top: 0;",
" left: 0;",
" width: 100%;",
" height: 100%;",
" z-index: 90;",
" background-color: #000;",
" opacity: 0.9;",
" filter: alpha(opacity=90)",
"}\n",
".nextOverlay{",
" visibility: hidden",
"}\n",
".previousOverlay,.currentOverlay{",
" visibility: visible",
"}\n",
"#displayArea{",
" font-size: 250%;",
" margin: 0 !important;",
" padding: 0",
"}\n",
"#controlBar{",
" position: fixed;",
" bottom: 2px;",
" right: 2px;",
" width: 100%;",
" text-align: right",
"}\n",
"#controlBar .button{",
" margin: 0 0.25em;",
" padding: 0 0.25em",
"}\n",
"",
"#slideHeader{",
" font-size: 200%;",
" font-weight: bold",
"}\n",
"#slideFooter{",
" position: fixed;",
" bottom: 2px",
"}\n",
".slideFooterOff #navigator{",
" visibility: hidden",
"}\n",
"#slideClock{",
" margin: 0 5px 0 5px",
"}\n",
"#slideCounter{",
" cursor: pointer;",
" color: #aaa",
"}\n",
"#toc{",
" display: none;",
" position: absolute;",
" font-size: .75em;",
" bottom: 2em;",
" right: 0;",
" background: #fff;",
" border: 1px solid #000;",
" text-align: left",
"}\n",
"#jumpItem{",
" padding-left:0.25em",
"}\n",
"#jumpInput{",
" margin-left: 0.25em;",
" width: 3em",
"}\n",
".tocLevel1{",
" font-size: .8em",
"}\n",
".tocLevel2{",
" margin-left: 1em;",
" font-size: .75em",
"}\n",
".tocLevel3{",
" margin-left: 2em;",
" font-size: .7em",
"}\n",
".tocLevel4{",
" margin-left: 3em;",
" font-size: .65em",
"}\n",
".tocLevel5{",
" margin-left: 4em;",
" font-size: .6em",
"}\n",
".tocLevel6{",
" margin-left: 5em;",
" font-size: .55em",
"}\n",
"/*}}}*/"].join('\n');

config.shadowTiddlers.SlideShowPluginDoc =
"[[SlideShowPlugin Documentation|http://www.math.ist.utl.pt/~psoares/addons.html#SlideShowPluginDoc]]";
}

})(jQuery)
//}}}
/*{{{*/
.header, #mainMenu, #sidebar, #backstageButton, #backstageArea, .topMenu,.toolbar, .title, .subtitle, .tagging, .tagged, .tagClear
.comment{ display:none !important }
#slideBlanker{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 90;  background-color: #000; opacity: 0.9; filter: alpha(opacity=90) }
.nextOverlay{ visibility: hidden }
.previousOverlay,.currentOverlay{ visibility: visible }
#displayArea{ font-size: 120%; margin: 0 !important; padding: 0 }
#controlBar{ position: fixed; bottom: 2px; right: 2px; width: 100%; text-align: right }
#controlBar .button{ margin: 0 0.25em; padding: 0 0.25em }
#slideHeader{ font-size: 70%; font-weight: bold }
#slideFooter{ position: fixed; bottom: 2px }
.slideFooterOff #navigator{ visibility: hidden }
#slideClock{ margin: 0 5px 0 5px }
#slideCounter{ cursor: pointer; color: #aaa }
#toc{ display: none; position: absolute; font-size: .75em; bottom: 2em; right: 0; background: #fff; border: 1px solid #000; text-align: left }
#jumpItem{ padding-left:0.25em }
#jumpInput{ margin-left: 0.25em; width: 3em }
.tocLevel1{ font-size: .8em }
.tocLevel2{ margin-left: 1em; font-size: .75em }
.tocLevel3{ margin-left: 2em; font-size: .7em }
.tocLevel4{ margin-left: 3em; font-size: .65em }
.tocLevel5{ margin-left: 4em; font-size: .6em }
.tocLevel6{ margin-left: 5em; font-size: .55em }
/*}}}*/
[[myCSS]]
/*{{{*/
@media print {#mainMenu {display: none ! important;}}
@media print {#topMenu {display: none ! important;}}
@media print {#sidebar {display: none ! important;}}
@media print {#messageArea {display: none ! important;}} 
@media print {#toolbar {display: none ! important;}}
@media print {.header {display: none ! important;}}
@media print {.tiddler .subtitle {display: none ! important;}}
@media print {.tiddler .toolbar {display; none ! important; }}
@media print {.tiddler .tagging {display; none ! important; }}
@media print {.tiddler .tagged {display; none ! important; }}
/*}}}*/
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors.  Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once.  ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while.  Your browser may warn about an 'unresponsive script'.  Usually, if you allow it to continue, it should complete the processing... eventually.  Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2011.01.21 2.4.5 auto-selection: use "-" for untagged tiddlers.  Also, added 'opened', 'invert'
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 5, date: new Date(2011,1,21)};

// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';

// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';

// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
	config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.macros.tiddlerTweaker = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,'span');
		span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
		this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
	},
	init: function(f,sortby) { // set form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty the list
		var tids=store.getTiddlers(sortby);
		if (sortby=='size') // descending order
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		var who='';
		for (i=0; i<tids.length; i++) { var t=tids[i];
			var label=t.title; var value=t.title;
			switch (sortby) {
				case 'modified':
				case 'created':
					var t=tids[tids.length-i-1]; // reverse order
					var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
					label=when+t.title;
					value=t.title;
					break;
				case 'size':
					label='['+t.text.length+'] '+label;
					break;
				case 'modifier':
				case 'creator':
					if (who!=t[sortby]) {
						who=t[sortby];
						f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
					}
					label='\xa0\xa0\xa0'+label; // indent
					break;
			}
			f.list.options[f.list.length]=new Option(label,value,false,false);
		}
		f.title.value=f.who.value=f.creator.value=f.tags.value='';
		f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
		f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
		f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
		f.settitle.disabled=false;
		config.options.txtTweakerSortBy=sortby;
		f.sortby.value=sortby; // sync droplist
		if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
		else removeCookie('txtTweakerSortBy');
	},
	enablefields: function(here) { // enables/disables inputs based on #items selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		f.set.disabled=(c==0);
		f.del.disabled=(c==0);
		f.edit.disabled=(c==0);
		f.display.disabled=(c==0);
		f.settitle.disabled=(c>1);
		f.stats.disabled=(c==0);
		var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
		here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
		if (c) clearMessage(); else displayMessage('no tiddlers selected');
	},
	setfields: function(here) { // set fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
			f.title.value=f.who.value=f.creator.value=f.tags.value='';
			f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
			f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
			return;
		}
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.title.value=tid.title;
		f.who.value=tid.modifier;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
		var c=tid.created; var m=tid.modified;
		f.cm.value=c.getMonth()+1;
		f.cd.value=c.getDate();
		f.cy.value=c.getFullYear();
		f.ch.value=c.getHours();
		f.cn.value=c.getMinutes();
		f.mm.value=m.getMonth()+1;
		f.md.value=m.getDate();
		f.my.value=m.getFullYear();
		f.mh.value=m.getHours();
		f.mn.value=m.getMinutes();
	},
	selecttiddlers: function(here,callback) {
		var f=here; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
		for (var t=f.list.options.length-1; t>=0; t--)
			f.list.options[t].selected=callback(f.list.options[t]);
		config.macros.tiddlerTweaker.enablefields(f.list);
		return false;
	},
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
		var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
		if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var text=tid.text;
			if (f.replacetext.checked) {
				var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
				text=text.replace(new RegExp(f.pattern.value,'mg'),r);
			}				
			var tags=tid.tags;
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
						addtags.push(intags[i].substr(1));
					else if (intags[i].substr(0,1)=='-')
						deltags.push(intags[i].substr(1));
					else
						reptags.push(intags[i]);
				}
				if (reptags.length)
					tags=reptags;
				if (addtags.length)
					tags=new Array().concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			}
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	displaytiddlers: function(here,edit) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
	},
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains('systemConfig')) {
				var msg=tid.title+' is tagged with systemConfig.'
					+'\n\nRemoving this tiddler may cause unexpected results.  Are you sure?';
				if (!confirm(msg)) continue;
			}
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
			+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
		wikify(out,target);
		target.style.display='block';
	}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
	{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
	--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
	-->&nbsp; <a href="javascript:;" 
		title="select all tiddlers"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return opt.value.length;
		});">all</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers currently displayed in the story column"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return story.getTiddler(opt.value);
		});">opened</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers that are new/changed since the last file save"
		onclick="var lastmod=new Date(document.lastModified);
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tid.modified>lastmod;
			});
		">changed</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers with at least one matching tag"
		onclick="var t=prompt('Enter space-separated tags (match one or more).  Use \x22-\x22 to match untagged tiddlers');
			if (!t||!t.length) return false;
			var tags=t.readBracketedList();
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tags[0]=='-'?!tid.tags.length:tid.tags.containsAny(tags);
			});
		">tags</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers whose titles include matching text"
		onclick="var t=prompt('Enter a title (or portion of a title) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				return opt.value.indexOf(t)!=-1;
			});
		">titles</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers containing matching text"
		onclick="var t=prompt('Enter tiddler text (content) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tt=store.getTiddlerText(opt.value,'');
				return tt.indexOf(t)!=-1;
			});
		">text</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="reverse selection of all list items"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return !opt.selected;
		});">invert</a><!--
	--></span><span>select tiddlers</span><!--
	--></div><!--
	--></font><select multiple name=list size="11" style="width:99.99%" 
		title="use click, shift-click and/or ctrl-click to select multiple tiddler titles" 
		onclick="config.macros.tiddlerTweaker.enablefields(this)" 
		onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
	--></select><br><!--
	-->show<input type=text size=1 value="11" 
		onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
	-->by<!--
	--><select name=sortby size=1 
		onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
	--><option value="title">title</option><!--
	--><option value="size">size</option><!--
	--><option value="modified">modified</option><!--
	--><option value="created">created</option><!--
	--><option value="modifier">modifier</option><!--
	--></select><!--
	--><input type="button" value="refresh" 
		onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
	--> <input type="button" name="stats" disabled value="totals..." 
		onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
	--><div style="text-align:left"><font size=-2>&nbsp;modify values</font></div><!--
	--><table style="width:100%;"><tr><!--
	--><td style="padding:1px"><!--
		--><input type=checkbox name=settitle unchecked 
			title="allow changes to tiddler title (rename tiddler)" 
			onclick="this.form.title.disabled=!this.checked">title<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=title size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcreator unchecked 
			title="allow changes to tiddler creator" 
			onclick="this.form.creator.disabled=!this.checked">created by<!--
	--></td><td style="padding:1px;"><!--
		--><input type=text name=creator size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setwho unchecked 
			title="allow changes to tiddler author" 
			onclick="this.form.who.disabled=!this.checked">modified by<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=who size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcdate unchecked 
			title="allow changes to created date" 
			onclick="var f=this.form;
				f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
		-->created on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setmdate unchecked 
			title="allow changes to modified date" 
			onclick="var f=this.form;
				f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
		-->modified on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=replacetext unchecked
			title="find/replace matching text" 
			onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=pattern size=15 value="" style="width:40%" disabled 
			title="enter TEXT PATTERN (regular expression)"> with<!--
		--><input type=text name=replacement size=15 value="" style="width:40%" disabled 
			title="enter REPLACEMENT TEXT"><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=settags checked 
			title="allow changes to tiddler tags" 
			onclick="this.form.tags.disabled=!this.checked">tags<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=tags size=35 value="" style="width:98%" 
			title="enter new tags or use '+tag' and '-tag' to add/remove tags from existing tags"><!--
	--></td></tr></table><!--
	--><div style="text-align:center"><!--
	--><nobr><input type=button name=display disabled style="width:24%" value="display" 
		title="show selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
	--> <input type=button name=edit disabled style="width:23%" value="edit" 
		title="edit selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
	--> <input type=button name=del disabled style="width:24%" value="delete" 
		title="remove selected tiddlers"
		onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
	--> <input type=button name=set disabled style="width:24%" value="update" 
		title="update selected tiddlers"
		onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
	--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
 
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<!-- <div class='subtitle'> <span macro='view modifier link'></span> <span macro='view modified date'></span> &#x2022; <div class='horizTag' macro='tags'> &#x2022; (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span> <span macro='view tags'></span> </div> -->
<!-- <div class='tagging' macro='tagging'></div> -->
<!-- <div class='tagged' macro='tags'></div> -->
<!-- <div class='subtitle'> <div class='horizTag' macro='tags'></div> --> </div>
<div class='viewer' macro='view text wikified'></div>
<div class='viewer' macro='tiddler ReplaceDoubleClick'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
|Name|WikifyPlugin|
|Source|http://www.TiddlyTools.com/#WikifyPlugin|
|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|
|Version|1.1.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|substitute fields, slices, or computed values into a wiki-syntax format string and render results dynamically|
The {{{<<wikify>>}}} macro allows you to easily retrieve values from custom tiddler fields, tiddler slices, computed values (using javascript) or just plain old literals, and assemble them into small bits of generated wiki-syntax text content that can be rendered directly into a tiddler, or used in the ViewTemplate or EditTemplate to add dynamically-generated content to each tiddler.

The {{{<<wikiCalc>>}}} macro performs the same processing as {{{<<wikify>>}}} and, in addition, passes the assembled text content through javascript's {{{eval()}}} function before rendering the results.  This allows you to, for example, construct and compute mathematical expressions that use input values extracted from tiddler fields or slices.
!!!!!Documentation
> see [[WikifyPluginInfo]]
!!!!!Revisions
<<<
2009.03.29 [1.1.4] in handler(), pass 'tiddler' value to wikify() to fix macro errors in rendered content
|please see [[WikifyPluginInfo]] for additional revision details|
2007.06.22 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.WikifyPlugin= {major: 1, minor: 1, revision: 4, date: new Date(2009,3,29)};

config.macros.wikify={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var fmt=params.shift();
		var values=[];
		var out="";
		if (!fmt.match(/\%[0-9]/g) && params.length) // format has no markers, just join all params with spaces
			out=fmt+" "+params.join(" ");
		else { // format param has markers, get values and perform substitution
			while (p=params.shift()) values.push(this.getFieldReference(place,p));
			out=fmt.format(values);
		}
		if (macroName=="wikiCalc") out=eval(out).toString();
		wikify(out.unescapeLineBreaks(),place,null,tiddler);
	},
	getFieldReference: function(place,p) { // "slicename::tiddlername" or "fieldname@tiddlername" or "fieldname"
		if (typeof p != "string") return p; // literal non-string value... just return it...
		var parts=p.split(config.textPrimitives.sliceSeparator);
		if (parts.length==2) {// maybe a slice reference?
			var tid=parts[0]; var slice=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteSlices"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getTiddlerSlice(tid,slice);  // get tiddler slice value
		}
		if (val==undefined) {// not a slice, or slice not found, maybe a field reference?
			var parts=p.split("@");
			var field=parts[0];
			if (!field || !field.length) field="checked"; // missing fieldname, fallback: checked@tiddlername
			var tid=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteFields"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getValue(tid,field);
		}
		// not a slice or field, or slice/field not found... return value unchanged
		return val===undefined?p:val;
	}
}
//}}}
//{{{
// define alternative macroName for triggering pre-rendering call to eval()
config.macros.wikiCalc=config.macros.wikify;
//}}}
">
//{{{
config.options.chkForceMinorUpdate=false;
config.options.txtUserName='CSA_FR';
config.options.chkOpenInNewWindow=true;
config.options.chkInsertTabs=true;
config.options.txtMaxEditRows="30";
config.options.chkAutoSave=true;
config.options.chkSaveBackups=true;
config.views.editor.defaultText='...'
config.options.chkGenerateAnRssFeed=false;
config.options.chkBackstage=false;
config.messages.tiddlerLinkTooltip="%0";
config.messages.externalLinkTooltip="Lien : %0";
//}}}
//{{{
// Misc Plug-ins
merge(config.macros.search,{ label: "Recherche", prompt: "Moteur de recherche local à ce TiddlyWiki",});
config.options.chkSnapshotHTMLOnly=false;
config.options.chkCopyTiddlerDate=false;
// TiddlyTools
//ToggleRightSidebar
config.options.chkShowRightSidebar=false;
// DisableWikiLinks
config.options.chkDisableWikiLinks=true;
config.options.chkAllowLinksFromShadowTiddlers=true;
config.options.chkDisableNonExistingWikiLinks=true;
// SinglePageMode
config.options.chkSinglePageMode=true;
config.options.chkSinglePageKeepEditedTiddlers=true;
config.options.chkTopOfPageMode=true;
config.options.chkBottomOfPageMode=true;
config.options.chkSinglePageAutoScroll=true;
config.options.chkSinglePagePermalink=true;
// ConfirmExit
config.options.chkAlwaysConfirmExit=true;
config.options.chkSaveOnExit=true;
// Breadcrumbs
config.options.chkShowBreadcrumbs=true;
config.options.txtBreadcrumbsLimit=8;
config.options.chkReorderBreadcrumbs=true;
config.options.txtBreadcrumbsCrumbSeparator=" -- » ";
config.options.chkBreadcrumbsSave=false;
config.options.chkShowStartupBreadcrumbs=true;
config.options.chkBreadcrumbsReverse=false;
config.options.chkBreadcrumbsLimitOpenTiddlers=false;
config.options.chkBreadcrumbsHideHomeLink=false;
//}}}
//{{{
merge(config.views.wikified,{
 dateFormat: "0DD.0MM.YYYY",
});
//}}}
//{{{
// TWadmin-RO
readOnly=true;
config.options.chkSinglePageMode=true;
config.options.chkHttpReadOnly=true;
showBackstage=false;
merge(config.shadowTiddlers,{ ToolbarCommands: '|~ViewToolbar|closeTiddler|\n|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|',});
// TWadmin-RW
// readOnly=false;
// config.options.chkHttpReadOnly=false;
// showBackstage=false;
//}}}
/*{{{*/
body {font-size:.70em;font-family:Verdana,times,serif; margin:0; padding:0;}
.toolbar {text-align:left; font-size:.7em;}
/*}}}*/
/*{{{*/
/***
StyleSheet IMG
***/
img {border:2px solid [[ColorPalette::Background]];}
/*}}}*/
/*{{{*/
/***
StyleSheetHeader
***/
.headerShadow {position:relative; padding:0.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:0.5em 0em 1em 1em; left:0px; top:0px;}
.headerShadow .right { position: absolute; top: 0; }
.headerShadow .right { right: 0; }
.headerForeground .right { display: none; }
/*}}}*/
/*{{{*/
/***
InlineTabs
***/
.tabSelected{
 color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]];
 border-left:2px solid [[ColorPalette::PrimaryMid]]; border-top:2px solid [[ColorPalette::PrimaryLight]]; border-right:2px solid [[ColorPalette::PrimaryMid]]; border-bottom-style:2px solid [[ColorPalette::PrimaryMid]];
}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::Background]]; border:2px solid [[ColorPalette::PrimaryMid]];}
/*}}}*/
/*{{{*/
/***
StyleSheetFirstLetter
***/
.firstletter{ float:left; width:0.6em; font-size:250%; font-family:times,arial; line-height:60%; color:#00f !important; background:inherit !important; }
.firstletterC{ float:center; width:0.6em; font-size:250%;  line-height:60%; color:#00f !important; background:inherit !important; }
.FirstLetter{ width:0.6em; font-size:150%; font-family:times,arial; line-height:60%; !important; background:inherit !important; }
/*}}}*/
/*{{{*/
/***
StyleSheetTableList
***/
.viewer ul {margin-top: 0; margin-bottom: 0;}
.viewer {text-align: justify;}
.viewer th {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::PrimaryMid]];}
/*}}}*/
/*{{{*/
/***
Alignement
***/
.floatleft { display:block;text-align:left; }
.floatL { display:block;text-align:left; }
.floatright { display:block;text-align:right; }
.floatR { display:block;text-align:right; }
.floatcenter { display:block;text-align:center; }
.floatC { display:block;text-align:center; }
.wideTable{width:100%}
.Table100{width:100%}
.Table98{width:98%}
/*}}}*/
/*{{{*/
/***
NestedSlidersPlugin
***/
.floatingPanel
 { z-index:700; padding:1em; margin:0em; border:1px solid; -moz-border-radius:1em; font-size:8pt; text-align:left; }
.floatingPanel hr
 { margin:2px 0 1px 0; padding:0; }
#sidebarOptions .sliderPanel
 { margin:0; padding:0; font-size:1em; background:transparent; }
#sidebarOptions .sliderPanel a
 { font-weight:normal; }
#sidebarOptions .sliderPanel blockquote
 { margin:0;padding:0;margin-left:1em; border-left:1px dotted; padding-left:1em }

.selected .floatingPanel .button,
.selected .floatingPanel a:link,
.selected .floatingPanel a:hover,
.selected .floatingPanel a:visited,
.floatingPanel .button,
.floatingPanel a:link,
.floatingPanel a:hover,
.floatingPanel a:visited
 { color:[[ColorPalette::PrimaryDark]] !important; }
/*}}}*/
/*{{{*/
.QOTD
 { color:#00f !important; background:inherit !important; }
/*}}}*/
/*{{{*/
/* displays the list of a tiddler's tags horizontally. used in ViewTemplate */
.horizTag li.listTitle { display:none }
.horizTag li { display: inline; font-size:90%; }
.horizTag ul { display:inline; margin:0px; padding:0px;}
/*}}}*/
/*{{{*/
.viewer td { vertical-align: top; }
.viewer th { vertical-align: top; }
.viewer dl { margin: 0; }
/*}}}*/